mirror of
https://github.com/DSpace/DSpace.git
synced 2025-10-07 01:54:22 +00:00
Merge pull request #19 from atmire/w2p-70401_count-queries-circular-entities
W2p 70401 count queries circular entities
This commit is contained in:
@@ -537,9 +537,9 @@ public class RelationshipServiceImpl implements RelationshipService {
|
||||
}
|
||||
|
||||
@Override
|
||||
public int countByItemAndRelationshipType(Context context, Item item, RelationshipType relationshipType)
|
||||
throws SQLException {
|
||||
return relationshipDAO.countByItemAndRelationshipType(context, item, relationshipType);
|
||||
public int countByItemAndRelationshipType(Context context, Item item, RelationshipType relationshipType,
|
||||
boolean isLeft) throws SQLException {
|
||||
return relationshipDAO.countByItemAndRelationshipType(context, item, relationshipType, isLeft);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@@ -189,15 +189,17 @@ public interface RelationshipDAO extends GenericDAO<Relationship> {
|
||||
int countByItem(Context context, Item item) throws SQLException;
|
||||
|
||||
/**
|
||||
* Count total number of relationships (rows in relationship table) by an item and a relationship type
|
||||
* Count total number of relationships (rows in relationship table) by an item and a relationship type and a boolean
|
||||
* indicating whether the item should be the leftItem or the rightItem
|
||||
*
|
||||
* @param context context
|
||||
* @param relationshipType relationship type to filter by
|
||||
* @param item item to filter by
|
||||
* @param isLeft Indicating whether the counted Relationships should have the given Item on the left side or not
|
||||
* @return total count
|
||||
* @throws SQLException if database error
|
||||
*/
|
||||
int countByItemAndRelationshipType(Context context, Item item, RelationshipType relationshipType)
|
||||
int countByItemAndRelationshipType(Context context, Item item, RelationshipType relationshipType, boolean isLeft)
|
||||
throws SQLException;
|
||||
|
||||
/**
|
||||
|
@@ -201,18 +201,24 @@ public class RelationshipDAOImpl extends AbstractHibernateDAO<Relationship> impl
|
||||
}
|
||||
|
||||
@Override
|
||||
public int countByItemAndRelationshipType(Context context, Item item, RelationshipType relationshipType)
|
||||
throws SQLException {
|
||||
public int countByItemAndRelationshipType(Context context, Item item, RelationshipType relationshipType,
|
||||
boolean isLeft) throws SQLException {
|
||||
|
||||
CriteriaBuilder criteriaBuilder = getCriteriaBuilder(context);
|
||||
CriteriaQuery criteriaQuery = getCriteriaQuery(criteriaBuilder, Relationship.class);
|
||||
Root<Relationship> relationshipRoot = criteriaQuery.from(Relationship.class);
|
||||
criteriaQuery.select(relationshipRoot);
|
||||
criteriaQuery
|
||||
if (isLeft) {
|
||||
criteriaQuery
|
||||
.where(criteriaBuilder.equal(relationshipRoot.get(Relationship_.relationshipType),
|
||||
relationshipType), criteriaBuilder.or
|
||||
(criteriaBuilder.equal(relationshipRoot.get(Relationship_.leftItem), item),
|
||||
criteriaBuilder.equal(relationshipRoot.get(Relationship_.rightItem), item)));
|
||||
relationshipType),
|
||||
criteriaBuilder.equal(relationshipRoot.get(Relationship_.leftItem), item));
|
||||
} else {
|
||||
criteriaQuery
|
||||
.where(criteriaBuilder.equal(relationshipRoot.get(Relationship_.relationshipType),
|
||||
relationshipType),
|
||||
criteriaBuilder.equal(relationshipRoot.get(Relationship_.rightItem), item));
|
||||
}
|
||||
return count(context, criteriaQuery, criteriaBuilder, relationshipRoot);
|
||||
}
|
||||
|
||||
|
@@ -283,14 +283,16 @@ public interface RelationshipService extends DSpaceCRUDService<Relationship> {
|
||||
int countByItem(Context context, Item item) throws SQLException;
|
||||
|
||||
/**
|
||||
* Count total number of relationships (rows in relationship table) by a relationship type
|
||||
* Count total number of relationships (rows in relationship table) by a relationship type and a boolean indicating
|
||||
* whether the relationship should contain the item on the left side or not
|
||||
*
|
||||
* @param context context
|
||||
* @param relationshipType relationship type to filter by
|
||||
* @return total count
|
||||
* @param isLeft Indicating whether the counted Relationships should have the given Item on the left side or not
|
||||
* @return total count with the given parameters
|
||||
* @throws SQLException if database error
|
||||
*/
|
||||
int countByItemAndRelationshipType(Context context, Item item, RelationshipType relationshipType)
|
||||
int countByItemAndRelationshipType(Context context, Item item, RelationshipType relationshipType, boolean isLeft)
|
||||
throws SQLException;
|
||||
|
||||
/**
|
||||
|
@@ -354,7 +354,7 @@ public class RelationshipRestRepository extends DSpaceRestRepository<Relationshi
|
||||
if (relationshipType.getLeftwardType().equalsIgnoreCase(label)) {
|
||||
isLeft = true;
|
||||
}
|
||||
total += relationshipService.countByItemAndRelationshipType(context, item, relationshipType);
|
||||
total += relationshipService.countByItemAndRelationshipType(context, item, relationshipType, isLeft);
|
||||
relationships.addAll(relationshipService.findByItemAndRelationshipType(context, item, relationshipType,
|
||||
isLeft, pageable.getPageSize(), Math.toIntExact(pageable.getOffset())));
|
||||
}
|
||||
|
@@ -97,6 +97,7 @@ public class RelationshipRestRepositoryIT extends AbstractEntityIntegrationTest
|
||||
|
||||
private Item orgUnit1;
|
||||
private Item orgUnit2;
|
||||
private Item orgUnit3;
|
||||
private Item project1;
|
||||
|
||||
private Item publication1;
|
||||
@@ -175,6 +176,13 @@ public class RelationshipRestRepositoryIT extends AbstractEntityIntegrationTest
|
||||
.withRelationshipType("OrgUnit")
|
||||
.build();
|
||||
|
||||
orgUnit3 = ItemBuilder.createItem(context, col3)
|
||||
.withTitle("OrgUnit3")
|
||||
.withAuthor("Test, Testy")
|
||||
.withIssueDate("2015-02-01")
|
||||
.withRelationshipType("OrgUnit")
|
||||
.build();
|
||||
|
||||
project1 = ItemBuilder.createItem(context, col3)
|
||||
.withTitle("Project1")
|
||||
.withAuthor("Testy, TEst")
|
||||
@@ -2566,5 +2574,60 @@ public class RelationshipRestRepositoryIT extends AbstractEntityIntegrationTest
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
public void orgUnitFindByLabelParentChildOfCountTest() throws Exception {
|
||||
context.turnOffAuthorisationSystem();
|
||||
EntityType orgUnit = entityTypeService.findByEntityType(context, "OrgUnit");
|
||||
RelationshipType isParentOrgUnitOf = relationshipTypeService
|
||||
.findbyTypesAndTypeName(context, orgUnit, orgUnit, "isParentOrgUnitOf", "isChildOrgUnitOf");
|
||||
|
||||
MetadataSchema metadataSchema = metadataSchemaService.find(context, "relation");
|
||||
MetadataFieldBuilder.createMetadataField(context, metadataSchema, "isParentOrgUnitOf", null, null).build();
|
||||
MetadataFieldBuilder.createMetadataField(context, metadataSchema, "isChildOrgUnitOf", null, null).build();
|
||||
|
||||
String adminToken = getAuthToken(admin.getEmail(), password);
|
||||
|
||||
context.restoreAuthSystemState();
|
||||
// Here we create our first Relationship to the Publication to give it a dc.contributor.author virtual
|
||||
// metadata field.
|
||||
getClient(adminToken).perform(post("/api/core/relationships")
|
||||
.param("relationshipType",
|
||||
isParentOrgUnitOf.getID().toString())
|
||||
.contentType(MediaType.parseMediaType
|
||||
(org.springframework.data.rest.webmvc.RestMediaTypes
|
||||
.TEXT_URI_LIST_VALUE))
|
||||
.content(
|
||||
"https://localhost:8080/server/api/core/items/" + orgUnit1
|
||||
.getID() + "\n" +
|
||||
"https://localhost:8080/server/api/core/items" +
|
||||
"/" + orgUnit2
|
||||
.getID()))
|
||||
.andExpect(status().isCreated());
|
||||
|
||||
getClient(adminToken).perform(post("/api/core/relationships")
|
||||
.param("relationshipType",
|
||||
isParentOrgUnitOf.getID().toString())
|
||||
.contentType(MediaType.parseMediaType
|
||||
(org.springframework.data.rest.webmvc.RestMediaTypes
|
||||
.TEXT_URI_LIST_VALUE))
|
||||
.content(
|
||||
"https://localhost:8080/server/api/core/items/" + orgUnit2
|
||||
.getID() + "\n" +
|
||||
"https://localhost:8080/server/api/core/items" +
|
||||
"/" + orgUnit3
|
||||
.getID()))
|
||||
.andExpect(status().isCreated());
|
||||
|
||||
getClient().perform(get("/api/core/relationships/search/byLabel")
|
||||
.param("label", "isChildOrgUnitOf")
|
||||
.param("dso", String.valueOf(orgUnit2.getID()))
|
||||
.param("page", "0")
|
||||
.param("size", "1"))
|
||||
.andExpect(status().isOk())
|
||||
.andExpect(jsonPath("$.page", PageMatcher.pageEntryWithTotalPagesAndElements(0, 1, 1, 1)));
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user