Skip to content

Commit

Permalink
fix for TestSecurity.test260AutzJackObjectFilterLocationShadowRole MI…
Browse files Browse the repository at this point in the history
…D-1873
  • Loading branch information
1azyman committed May 21, 2014
1 parent 6c3262f commit 5366485
Show file tree
Hide file tree
Showing 4 changed files with 58 additions and 33 deletions.
Expand Up @@ -957,7 +957,7 @@ public void run(Task task, OperationResult result) throws Exception {
assertDeleteDeny(ShadowType.class, ACCOUNT_SHADOW_ELAINE_DUMMY_OID);
}

@Test(enabled=false) // MID-1873
@Test
public void test260AutzJackObjectFilterLocationShadowRole() throws Exception {
final String TEST_NAME = "test260AutzJackObjectFilterLocationShadowRole";
TestUtil.displayTestTile(this, TEST_NAME);
Expand Down
Expand Up @@ -1497,4 +1497,54 @@ public void test390queryObjectypeByTypeAndReference() throws Exception {
close(session);
}
}

@Test
public void test400queryObjectypeByTypeComplex() throws Exception {
Session session = open();
try {
Criteria main = session.createCriteria(RObject.class, "o");
ProjectionList projections = Projections.projectionList();
addFullObjectProjectionList("o", projections, false);
main.setProjection(projections);

Conjunction c1 = Restrictions.conjunction();
c1.add(Restrictions.eq("o." + RObject.F_OBJECT_TYPE_CLASS, RObjectType.USER));
Criterion e1 = Restrictions.and(Restrictions.eq("o.localityUser.orig", "Caribbean"),
Restrictions.eq("o.localityUser.norm", "caribbean"));
Criterion e2 = Restrictions.and(Restrictions.eq("o.localityUser.orig", "Adriatic"),
Restrictions.eq("o.localityUser.norm", "adriatic"));
c1.add(Restrictions.or(e1, e2));

Conjunction c2 = Restrictions.conjunction();
c2.add(Restrictions.eq("o." + RObject.F_OBJECT_TYPE_CLASS, RObjectType.ORG));
Criteria o1 = main.createCriteria("o.orgType", "o1", JoinType.LEFT_OUTER_JOIN);
c2.add(Restrictions.eq("o1.elements", "functional"));

Criterion c3 = Restrictions.eq("o." + RObject.F_OBJECT_TYPE_CLASS, RObjectType.REPORT);

main.add(Restrictions.or(c1, c2, c3));
String expected = HibernateToSqlTranslator.toSql(main);


EqualFilter eq1 = EqualFilter.createEqual(UserType.F_LOCALITY, UserType.class, prismContext,
new PolyString("Caribbean", "caribbean"));
EqualFilter eq2 = EqualFilter.createEqual(UserType.F_LOCALITY, UserType.class, prismContext,
new PolyString("Adriatic", "adriatic"));
TypeFilter type1 = TypeFilter.createType(UserType.COMPLEX_TYPE, OrFilter.createOr(eq1, eq2));

EqualFilter equal = EqualFilter.createEqual(OrgType.F_ORG_TYPE, OrgType.class, prismContext, "functional");
TypeFilter type2 = TypeFilter.createType(OrgType.COMPLEX_TYPE, equal);

TypeFilter type3 = TypeFilter.createType(ReportType.COMPLEX_TYPE, null);

OrFilter or = OrFilter.createOr(type1, type2, type3);

String real = getInterpretedQuery(session, ObjectType.class, ObjectQuery.createObjectQuery(or));

LOGGER.info("exp. query>\n{}\nreal query>\n{}", new Object[]{expected, real});
AssertJUnit.assertEquals(expected, real);
} finally {
close(session);
}
}
}
Expand Up @@ -20,12 +20,10 @@
import com.evolveum.midpoint.prism.polystring.PolyString;
import com.evolveum.midpoint.prism.query.ObjectFilter;
import com.evolveum.midpoint.prism.query.ValueFilter;
import com.evolveum.midpoint.repo.sql.query.QueryException;
import com.evolveum.midpoint.repo.sql.query.QueryContext;
import com.evolveum.midpoint.repo.sql.query.QueryDefinitionRegistry;
import com.evolveum.midpoint.repo.sql.query.QueryException;
import com.evolveum.midpoint.repo.sql.query.definition.CollectionDefinition;
import com.evolveum.midpoint.repo.sql.query.definition.PropertyDefinition;
import com.evolveum.midpoint.repo.sql.util.RUtil;
import org.hibernate.criterion.Criterion;

/**
Expand All @@ -40,11 +38,9 @@ public boolean canHandle(ObjectFilter filter, QueryContext context) throws Query
}

ValueFilter valFilter = (ValueFilter) filter;
QueryDefinitionRegistry registry = QueryDefinitionRegistry.getInstance();
// ItemPath fullPath = RUtil.createFullPath(valFilter);
ItemPath fullPath = valFilter.getFullPath();

CollectionDefinition def = registry.findDefinition(context.getType(), fullPath, CollectionDefinition.class);
CollectionDefinition def = findProperDefinition(fullPath, CollectionDefinition.class);
if (def == null) {
return false;
}
Expand All @@ -54,11 +50,9 @@ public boolean canHandle(ObjectFilter filter, QueryContext context) throws Query

@Override
public Criterion interpretInternal(ValueFilter filter) throws QueryException {
// ItemPath fullPath = RUtil.createFullPath(filter);
ItemPath fullPath = filter.getFullPath();
QueryContext context = getContext();
QueryDefinitionRegistry registry = QueryDefinitionRegistry.getInstance();
CollectionDefinition def = registry.findDefinition(context.getType(), fullPath, CollectionDefinition.class);
ItemPath fullPath = filter.getFullPath();
QueryContext context = getContext();
CollectionDefinition def = findProperDefinition(fullPath, CollectionDefinition.class);

String alias = context.getAlias(fullPath);
Object value = getValueFromFilter(filter, (PropertyDefinition) def.getDefinition());
Expand Down
Expand Up @@ -20,22 +20,16 @@
import com.evolveum.midpoint.prism.path.ItemPathSegment;
import com.evolveum.midpoint.prism.query.ObjectFilter;
import com.evolveum.midpoint.prism.query.ValueFilter;
import com.evolveum.midpoint.repo.sql.data.common.other.RObjectType;
import com.evolveum.midpoint.repo.sql.query.QueryException;
import com.evolveum.midpoint.repo.sql.query.QueryContext;
import com.evolveum.midpoint.repo.sql.query.QueryDefinitionRegistry;
import com.evolveum.midpoint.repo.sql.query.QueryException;
import com.evolveum.midpoint.repo.sql.query.definition.*;
import com.evolveum.midpoint.repo.sql.util.ClassMapper;
import com.evolveum.midpoint.schema.constants.ObjectTypes;
import com.evolveum.midpoint.util.logging.Trace;
import com.evolveum.midpoint.util.logging.TraceManager;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectType;

import org.apache.commons.lang.StringUtils;
import org.hibernate.criterion.Criterion;

import javax.xml.namespace.QName;

import java.util.List;

/**
Expand All @@ -52,22 +46,9 @@ public boolean canHandle(ObjectFilter filter, QueryContext context) throws Query
}

ValueFilter valFilter = (ValueFilter) filter;

QueryDefinitionRegistry registry = QueryDefinitionRegistry.getInstance();
ItemPath fullPath = valFilter.getFullPath();

PropertyDefinition def = registry.findDefinition(context.getType(), fullPath, PropertyDefinition.class);
if (ObjectType.class.equals(context.getType()) && def == null) {
//we should try to find property in descendant classes
for (RObjectType type : RObjectType.values()) {
ObjectTypes ot = ClassMapper.getObjectTypeForHQLType(type);
def = registry.findDefinition(ot.getClassDefinition(), fullPath, PropertyDefinition.class);
if (def != null) {
break;
}
}
}

PropertyDefinition def = findProperDefinition(fullPath, PropertyDefinition.class);
return def != null;
}

Expand Down

0 comments on commit 5366485

Please sign in to comment.