Skip to content

Commit

Permalink
JpaDataNodeDefinition: rolling back some overzealous generification
Browse files Browse the repository at this point in the history
  • Loading branch information
virgo47 committed Jun 17, 2020
1 parent 5638995 commit a6473f1
Show file tree
Hide file tree
Showing 4 changed files with 37 additions and 33 deletions.
Expand Up @@ -87,7 +87,7 @@ public final class QueryDefinitionRegistry implements DebugDumpable {
Visitor resolutionVisitor = visitable -> {
if (visitable instanceof JpaEntityDefinition) {
JpaEntityDefinition entityDef = ((JpaEntityDefinition) visitable);
Class superclass = entityDef.getJpaClass().getSuperclass();
Class<?> superclass = entityDef.getJpaClass().getSuperclass();
if (superclass == null || !RObject.class.isAssignableFrom(superclass)) {
return;
}
Expand All @@ -99,7 +99,7 @@ public final class QueryDefinitionRegistry implements DebugDumpable {
} else if (visitable instanceof JpaEntityPointerDefinition) {
JpaEntityPointerDefinition entPtrDef = ((JpaEntityPointerDefinition) visitable);
if (!entPtrDef.isResolved()) {
Class referencedEntityJpaClass = entPtrDef.getJpaClass();
Class<?> referencedEntityJpaClass = entPtrDef.getJpaClass();
JpaEntityDefinition realEntDef = definitionsByClass.get(referencedEntityJpaClass);
if (realEntDef == null) {
throw new IllegalStateException("Couldn't find entity definition for " + referencedEntityJpaClass);
Expand Down
Expand Up @@ -14,7 +14,6 @@
import com.evolveum.midpoint.prism.PrismContext;
import com.evolveum.midpoint.prism.Visitable;
import com.evolveum.midpoint.prism.path.ItemPath;
import com.evolveum.midpoint.repo.sql.data.common.RObject;
import com.evolveum.midpoint.repo.sql.query.QueryException;
import com.evolveum.midpoint.repo.sql.query.resolution.DataSearchResult;
import com.evolveum.midpoint.util.DebugDumpable;
Expand Down Expand Up @@ -50,21 +49,22 @@ public abstract class JpaDataNodeDefinition<T extends JpaDataNodeDefinition<T>>
/**
* JPA class - either "composite" (RObject, RUser, RAssignment, ...) or "primitive" (String, Integer, int, ...)
*/
@NotNull private final Class<? extends RObject> jpaClass;
@NotNull private final Class<?> jpaClass;

/**
* JAXB class - either "composite" (ObjectType, UserType, AssignmentType, ...) or "primitive" (String, Integer, int, ...)
* JAXB class - either "composite" (ObjectType, UserType, AssignmentType, ...)
* or "primitive" (String, Integer, int, ...).
* Null if not known.
*/
@Nullable private final Class<?> jaxbClass;

public JpaDataNodeDefinition(@NotNull Class<? extends RObject> jpaClass, @Nullable Class<?> jaxbClass) {
public JpaDataNodeDefinition(@NotNull Class<?> jpaClass, @Nullable Class<?> jaxbClass) {
this.jpaClass = jpaClass;
this.jaxbClass = jaxbClass;
}

@NotNull
public Class<? extends RObject> getJpaClass() {
public Class<?> getJpaClass() {
return jpaClass;
}

Expand Down
Expand Up @@ -7,18 +7,19 @@

package com.evolveum.midpoint.repo.sql.query.hqm;

import java.util.ArrayList;
import java.util.List;

import org.apache.commons.lang.Validate;
import org.jetbrains.annotations.NotNull;

import com.evolveum.midpoint.prism.query.OrderDirection;
import com.evolveum.midpoint.repo.sql.data.common.RObject;
import com.evolveum.midpoint.repo.sql.query.QueryException;
import com.evolveum.midpoint.repo.sql.query.definition.JpaEntityDefinition;
import com.evolveum.midpoint.repo.sql.query.definition.JpaLinkDefinition;
import com.evolveum.midpoint.repo.sql.query.hqm.condition.Condition;
import com.evolveum.midpoint.repo.sql.util.ClassMapper;
import org.apache.commons.lang.Validate;
import org.jetbrains.annotations.NotNull;

import java.util.ArrayList;
import java.util.List;

/**
* Query in HQL that is being created.
Expand All @@ -35,11 +36,11 @@ public abstract class HibernateQuery {
/**
* Primary entity for this query, along with joined entities.
* For example,
* RUser u
* RUser u
* Or,
* RUser u
* left join u.assignments a with ...
*
* RUser u
* left join u.assignments a with ...
* <p>
* (originally, we thought about cross-joins with other entities, hence "primary entity")
*/
private EntityReference primaryEntity; // not null
Expand Down Expand Up @@ -70,7 +71,6 @@ public OrderDirection getDirection() {

private List<Ordering> orderingList = new ArrayList<>();


public static class Grouping {
@NotNull private final String byProperty;

Expand All @@ -86,7 +86,6 @@ public String getByProperty() {

private List<Grouping> groupingList = new ArrayList<>();


public HibernateQuery(@NotNull JpaEntityDefinition primaryEntityDef) {
primaryEntity = createItemSpecification(primaryEntityDef);
}
Expand Down Expand Up @@ -146,7 +145,7 @@ public String getAsHqlText(int indent, boolean distinct) {
sb.append("\n");
indent(sb, indent);
sb.append("where\n");
Condition.dumpToHql(sb, conditions, indent+1);
Condition.dumpToHql(sb, conditions, indent + 1);
}
if (!orderingList.isEmpty()) {
sb.append("\n");
Expand All @@ -162,9 +161,14 @@ public String getAsHqlText(int indent, boolean distinct) {
sb.append(ordering.byProperty);
if (ordering.direction != null) {
switch (ordering.direction) {
case DESCENDING: sb.append(" desc"); break;
case ASCENDING: sb.append(" asc"); break;
default: throw new IllegalStateException("Unknown ordering: " + ordering.direction);
case DESCENDING:
sb.append(" desc");
break;
case ASCENDING:
sb.append(" asc");
break;
default:
throw new IllegalStateException("Unknown ordering: " + ordering.direction);
}
}
}
Expand Down Expand Up @@ -264,14 +268,13 @@ public List<Grouping> getGroupingList() {
return groupingList;
}


public abstract RootHibernateQuery getRootQuery();

// used to narrow the primary entity e.g. from RObject to RUser (e.g. during ItemValueRestriction processing)
public void narrowPrimaryEntity(JpaEntityDefinition newDefinition) throws QueryException {
String oldEntityName = getPrimaryEntity().getName();
Class<? extends RObject> oldEntityClass = ClassMapper.getHqlClassForHqlName(oldEntityName);
Class<? extends RObject> newEntityClass = newDefinition.getJpaClass();
Class<?> newEntityClass = newDefinition.getJpaClass();
if (!(oldEntityClass.isAssignableFrom(newEntityClass))) {
throw new QueryException("Cannot narrow primary entity definition from " + oldEntityClass + " to " + newEntityClass);
}
Expand Down
Expand Up @@ -7,31 +7,32 @@

package com.evolveum.midpoint.repo.sql.query.restriction;

import javax.xml.namespace.QName;

import org.apache.commons.lang.ClassUtils;
import org.apache.commons.lang.Validate;

import com.evolveum.midpoint.prism.polystring.PolyString;
import com.evolveum.midpoint.prism.query.ComparativeFilter;
import com.evolveum.midpoint.prism.query.EqualFilter;
import com.evolveum.midpoint.prism.query.PropertyValueFilter;
import com.evolveum.midpoint.prism.query.ValueFilter;
import com.evolveum.midpoint.repo.sql.data.common.enums.SchemaEnum;
import com.evolveum.midpoint.repo.sql.query.QueryException;
import com.evolveum.midpoint.repo.sql.query.hqm.condition.ConstantCondition;
import com.evolveum.midpoint.repo.sql.query.resolution.HqlDataInstance;
import com.evolveum.midpoint.repo.sql.query.InterpretationContext;
import com.evolveum.midpoint.repo.sql.query.QueryException;
import com.evolveum.midpoint.repo.sql.query.definition.JpaEntityDefinition;
import com.evolveum.midpoint.repo.sql.query.definition.JpaPropertyDefinition;
import com.evolveum.midpoint.repo.sql.query.definition.JpaLinkDefinition;
import com.evolveum.midpoint.repo.sql.query.definition.JpaPropertyDefinition;
import com.evolveum.midpoint.repo.sql.query.hqm.RootHibernateQuery;
import com.evolveum.midpoint.repo.sql.query.hqm.condition.Condition;
import com.evolveum.midpoint.repo.sql.query.hqm.condition.ConstantCondition;
import com.evolveum.midpoint.repo.sql.query.resolution.HqlDataInstance;
import com.evolveum.midpoint.repo.sql.util.RUtil;
import com.evolveum.midpoint.util.exception.SchemaException;
import com.evolveum.midpoint.util.logging.Trace;
import com.evolveum.midpoint.util.logging.TraceManager;
import com.evolveum.prism.xml.ns._public.types_3.PolyStringType;
import com.evolveum.prism.xml.ns._public.types_3.RawType;
import org.apache.commons.lang.ClassUtils;
import org.apache.commons.lang.Validate;

import javax.xml.namespace.QName;

/**
* @author lazyman
Expand All @@ -44,7 +45,7 @@ public class PropertyRestriction extends ItemValueRestriction<PropertyValueFilte
private JpaLinkDefinition<JpaPropertyDefinition> linkDefinition;

public PropertyRestriction(InterpretationContext context, PropertyValueFilter filter, JpaEntityDefinition baseEntityDefinition,
Restriction parent, JpaLinkDefinition<JpaPropertyDefinition> linkDefinition) {
Restriction parent, JpaLinkDefinition<JpaPropertyDefinition> linkDefinition) {
super(context, filter, baseEntityDefinition, parent);
Validate.notNull(linkDefinition, "linkDefinition");
this.linkDefinition = linkDefinition;
Expand Down

0 comments on commit a6473f1

Please sign in to comment.