Skip to content

Commit

Permalink
MID-2133 upgrading repository to support boolean extension values.
Browse files Browse the repository at this point in the history
  • Loading branch information
1azyman committed Apr 4, 2015
1 parent 211bb8a commit d57ccc1
Show file tree
Hide file tree
Showing 15 changed files with 779 additions and 73 deletions.
Expand Up @@ -821,13 +821,15 @@ private void addFullObjectProjectionList(String prefix, ProjectionList list, boo
list.add(Projections.groupProperty(prefix + "datesCount"));
list.add(Projections.groupProperty(prefix + "referencesCount"));
list.add(Projections.groupProperty(prefix + "polysCount"));
list.add(Projections.groupProperty(prefix + "booleansCount"));
} else {
list.add(Projections.property(prefix + "fullObject"));
list.add(Projections.property(prefix + "stringsCount"));
list.add(Projections.property(prefix + "longsCount"));
list.add(Projections.property(prefix + "datesCount"));
list.add(Projections.property(prefix + "referencesCount"));
list.add(Projections.property(prefix + "polysCount"));
list.add(Projections.property(prefix + "booleansCount"));
}
}

Expand Down Expand Up @@ -1159,6 +1161,7 @@ public void test310QueryNameAndOrg() throws Exception {
projections.add(Projections.property("datesCount"));
projections.add(Projections.property("referencesCount"));
projections.add(Projections.property("polysCount"));
projections.add(Projections.property("booleansCount"));

main.setProjection(projections);

Expand Down Expand Up @@ -1650,4 +1653,57 @@ public void test420QueryGenericString() throws Exception {
// close(session);
// }
// }

@Test
public void test430QueryGenericBoolean() throws Exception {
Session session = open();
try {
Criteria main = session.createCriteria(RGenericObject.class, "g");

Criteria stringExt = main.createCriteria("booleans", "b", JoinType.LEFT_OUTER_JOIN);

//and
Conjunction c2 = Restrictions.conjunction();
c2.add(Restrictions.eq("b.ownerType", RObjectExtensionType.EXTENSION));
c2.add(Restrictions.eq("b.name", new QName("http://example.com/p", "skipAutogeneration")));
c2.add(Restrictions.eq("b.value", true));

main.add(c2);
ProjectionList projections = Projections.projectionList();
addFullObjectProjectionList("g", projections, false);
main.setProjection(projections);

String expected = HibernateToSqlTranslator.toSql(main);

EqualFilter eq = EqualFilter.createEqual(
new ItemPath(ObjectType.F_EXTENSION, new QName("http://example.com/p", "skipAutogeneration")),
GenericObjectType.class, prismContext, true);

String real = getInterpretedQuery(session, GenericObjectType.class, ObjectQuery.createObjectQuery(eq));

LOGGER.info("exp. query>\n{}\nreal query>\n{}", new Object[]{expected, real});
AssertJUnit.assertEquals(expected, real);

OperationResult result = new OperationResult("search");
List<PrismObject<GenericObjectType>> objects = repositoryService.searchObjects(GenericObjectType.class,
ObjectQuery.createObjectQuery(eq), null, result);
result.computeStatus();
AssertJUnit.assertTrue(result.isSuccess());

AssertJUnit.assertNotNull(objects);
AssertJUnit.assertEquals(1, objects.size());

PrismObject<GenericObjectType> obj = objects.get(0);
AssertJUnit.assertTrue(obj.getCompileTimeClass().equals(GenericObjectType.class));

result = new OperationResult("count");
long count = repositoryService.countObjects(GenericObjectType.class, ObjectQuery.createObjectQuery(eq),
result);
result.computeStatus();
AssertJUnit.assertTrue(result.isSuccess());
AssertJUnit.assertEquals(1, count);
} finally {
close(session);
}
}
}
2 changes: 2 additions & 0 deletions repo/repo-sql-impl-test/src/test/resources/basic/objects.xml
Expand Up @@ -52,6 +52,7 @@
<description>Some assignment description</description>
<extension>
<my:dead xsi:type="xsd:int">123</my:dead>
<my:skipAutogeneration xsi:type="xsd:boolean">true</my:skipAutogeneration>
</extension>
<metadata>
<creatorRef oid="dddccccc-cccc-cccc-cccc-000022222222" type="c:UserType"/>
Expand Down Expand Up @@ -635,6 +636,7 @@
<t:orig>UserX00002</t:orig>
<t:norm>userx00002</t:norm>
</p:polyType>
<p:skipAutogeneration>true</p:skipAutogeneration>
</extension>
<objectType>http://myself.me/schemas/objects#SampleConfigType</objectType>
</genericObject>
Expand Down
19 changes: 19 additions & 0 deletions repo/repo-sql-impl-test/src/test/resources/schema/extension.xsd
Expand Up @@ -45,6 +45,16 @@

<xsd:element name="dead" type="xsd:string"/>

<xsd:element name="skipAutogeneration" type="xsd:boolean">
<xsd:annotation>
<xsd:appinfo>
<a:indexed>true</a:indexed>
<a:displayName>Do not generate</a:displayName>
<a:displayOrder>10</a:displayOrder>
</xsd:appinfo>
</xsd:annotation>
</xsd:element>

<!-- account shadow extension -->

<xsd:complexType name="AccountShadowExtensionType">
Expand Down Expand Up @@ -79,6 +89,15 @@
<xsd:element name="referenceType" type="c:ObjectReferenceType"/>
<xsd:element name="polyType" type="t:PolyStringType"/>
<xsd:element name="enumType" type="c:BeforeAfterType"/>
<xsd:element name="skipAutogeneration" type="xsd:boolean" minOccurs="0" maxOccurs="1">
<xsd:annotation>
<xsd:appinfo>
<a:indexed>true</a:indexed>
<a:displayName>Do not generate</a:displayName>
<a:displayOrder>10</a:displayOrder>
</xsd:appinfo>
</xsd:annotation>
</xsd:element>
</xsd:sequence>
</xsd:complexType>

Expand Down
Expand Up @@ -173,7 +173,7 @@ private <T extends ObjectType> PrismObject<T> getObject(Session session, Class<T
if (obj != null) {
obj.toJAXB(getPrismContext(), null).asPrismObject();
fullObject = new GetObjectResult(obj.getFullObject(), obj.getStringsCount(), obj.getLongsCount(),
obj.getDatesCount(), obj.getReferencesCount(), obj.getPolysCount());
obj.getDatesCount(), obj.getReferencesCount(), obj.getPolysCount(), obj.getBooleansCount());
}
}

Expand Down
Expand Up @@ -54,15 +54,15 @@
*/
@NamedQueries({
@NamedQuery(name = "get.userPhoto", query = "select p.photo from RUserPhoto p where p.ownerOid = :oid"),
@NamedQuery(name = "get.object", query = "select o.fullObject, o.stringsCount, o.longsCount, o.datesCount, o.referencesCount, o.polysCount from RObject as o where o.oid=:oid"),
@NamedQuery(name = "get.object", query = "select o.fullObject, o.stringsCount, o.longsCount, o.datesCount, o.referencesCount, o.polysCount, o.booleansCount from RObject as o where o.oid=:oid"),
@NamedQuery(name = "searchShadowOwner.getShadow", query = "select s.oid from RShadow as s where s.oid = :oid"),
@NamedQuery(name = "searchShadowOwner.getOwner", query = "select o.fullObject, o.stringsCount, o.longsCount, o.datesCount, o.referencesCount, o.polysCount from RFocus as o left join o.linkRef as ref where ref.targetOid = :oid"),
@NamedQuery(name = "listAccountShadowOwner.getUser", query = "select u.fullObject, u.stringsCount, u.longsCount, u.datesCount, u.referencesCount, u.polysCount from RUser as u left join u.linkRef as ref where ref.targetOid = :oid"),
@NamedQuery(name = "getExtCount", query = "select stringsCount, longsCount, datesCount, referencesCount, polysCount from RObject where oid = :oid"),
@NamedQuery(name = "searchShadowOwner.getOwner", query = "select o.fullObject, o.stringsCount, o.longsCount, o.datesCount, o.referencesCount, o.polysCount, o.booleansCount from RFocus as o left join o.linkRef as ref where ref.targetOid = :oid"),
@NamedQuery(name = "listAccountShadowOwner.getUser", query = "select u.fullObject, u.stringsCount, u.longsCount, u.datesCount, u.referencesCount, u.polysCount, u.booleansCount from RUser as u left join u.linkRef as ref where ref.targetOid = :oid"),
@NamedQuery(name = "getExtCount", query = "select stringsCount, longsCount, datesCount, referencesCount, polysCount, booleansCount from RObject where oid = :oid"),
@NamedQuery(name = "getVersion", query = "select o.version from RObject as o where o.oid = :oid"),
@NamedQuery(name = "existOrgClosure", query = "select count(*) from ROrgClosure as o where o.ancestorOid = :ancestorOid and o.descendantOid = :descendantOid"),
@NamedQuery(name = "sqlDeleteOrgClosure", query = "delete from ROrgClosure as o where o.descendantOid = :oid or o.ancestorOid = :oid"),
@NamedQuery(name = "listResourceObjectShadows", query = "select s.fullObject, s.stringsCount, s.longsCount, s.datesCount, s.referencesCount, s.polysCount from RShadow as s left join s.resourceRef as ref where ref.targetOid = :oid"),
@NamedQuery(name = "listResourceObjectShadows", query = "select s.fullObject, s.stringsCount, s.longsCount, s.datesCount, s.referencesCount, s.polysCount, s.booleansCount from RShadow as s left join s.resourceRef as ref where ref.targetOid = :oid"),
@NamedQuery(name = "getDefinition.ROExtDate", query = "select c.name, c.type, c.valueType from ROExtDate as c where c.ownerOid = :oid and c.ownerType = :ownerType"),
@NamedQuery(name = "getDefinition.ROExtString", query = "select c.name, c.type, c.valueType from ROExtString as c where c.ownerOid = :oid and c.ownerType = :ownerType"),
@NamedQuery(name = "getDefinition.ROExtPolyString", query = "select c.name, c.type, c.valueType from ROExtPolyString as c where c.ownerOid = :oid and c.ownerType = :ownerType"),
Expand Down Expand Up @@ -111,6 +111,7 @@ public abstract class RObject<T extends ObjectType> implements Metadata<RObjectR
private Set<RObjectReference> modifyApproverRef;
private String modifyChannel;
//extension, and other "any" like shadow/attributes
private Short booleansCount;
private Short stringsCount;
private Short longsCount;
private Short datesCount;
Expand All @@ -121,6 +122,7 @@ public abstract class RObject<T extends ObjectType> implements Metadata<RObjectR
private Set<ROExtDate> dates;
private Set<ROExtReference> references;
private Set<ROExtPolyString> polys;
private Set<ROExtBoolean> booleans;

@Id
@GeneratedValue(generator = "ObjectOidGenerator")
Expand Down Expand Up @@ -238,6 +240,15 @@ public Set<ROExtLong> getLongs() {
return longs;
}

@OneToMany(mappedBy = "owner", orphanRemoval = true)
@Cascade({org.hibernate.annotations.CascadeType.ALL})
public Set<ROExtBoolean> getBooleans() {
if (booleans == null) {
booleans = new HashSet<>();
}
return booleans;
}

@OneToMany(mappedBy = "owner", orphanRemoval = true)
@Cascade({org.hibernate.annotations.CascadeType.ALL})
public Set<ROExtString> getStrings() {
Expand Down Expand Up @@ -281,6 +292,13 @@ public Short getStringsCount() {
return stringsCount;
}

public Short getBooleansCount() {
if (booleansCount == null) {
booleansCount = 0;
}
return booleansCount;
}

public Short getLongsCount() {
if (longsCount == null) {
longsCount = 0;
Expand Down Expand Up @@ -436,6 +454,14 @@ public void setStrings(Set<ROExtString> strings) {
this.strings = strings;
}

public void setBooleansCount(Short booleansCount) {
this.booleansCount = booleansCount;
}

public void setBooleans(Set<ROExtBoolean> booleans) {
this.booleans = booleans;
}

@Override
public boolean equals(Object o) {
if (this == o)
Expand Down Expand Up @@ -473,6 +499,9 @@ public boolean equals(Object o) {
if (strings != null ? !strings.equals(rObject.strings) : rObject.strings != null) return false;
if (stringsCount != null ? !stringsCount.equals(rObject.stringsCount) : rObject.stringsCount != null)
return false;
if (booleans != null ? !booleans.equals(rObject.booleans) : rObject.booleans != null) return false;
if (booleansCount != null ? !booleansCount.equals(rObject.booleansCount) : rObject.booleansCount != null)
return false;

return true;
}
Expand Down Expand Up @@ -587,6 +616,8 @@ public static void copyFromJAXB(PrismContainerValue containerValue, RObject repo
repo.getStrings().add(value);
} else if (value instanceof ROExtPolyString) {
repo.getPolys().add(value);
} else if (value instanceof ROExtBoolean) {
repo.getBooleans().add(value);
}
}

Expand All @@ -595,5 +626,6 @@ public static void copyFromJAXB(PrismContainerValue containerValue, RObject repo
repo.setPolysCount((short) repo.getPolys().size());
repo.setReferencesCount((short) repo.getReferences().size());
repo.setLongsCount((short) repo.getLongs().size());
repo.setBooleansCount((short) repo.getBooleans().size());
}
}

0 comments on commit d57ccc1

Please sign in to comment.