Skip to content
Snippets Groups Projects
Commit 89410f24 authored by vkovtun's avatar vkovtun
Browse files

SSDM-8226 Attached SearchSpacesOperationExecutor to new SQL translation implementation.

parent b12cff7d
No related branches found
No related tags found
No related merge requests found
......@@ -16,7 +16,12 @@
package ch.ethz.sis.openbis.generic.server.asapi.v3.executor.space;
import ch.ethz.sis.openbis.generic.asapi.v3.dto.project.Project;
import ch.ethz.sis.openbis.generic.asapi.v3.dto.project.fetchoptions.ProjectFetchOptions;
import ch.ethz.sis.openbis.generic.asapi.v3.dto.project.search.ProjectSearchCriteria;
import ch.ethz.sis.openbis.generic.server.asapi.v3.executor.IOperationContext;
import ch.ethz.sis.openbis.generic.server.asapi.v3.search.planner.ISearchManager;
import ch.ethz.sis.openbis.generic.server.asapi.v3.search.planner.SpaceSearchManager;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
......@@ -48,6 +53,9 @@ public class SearchSpacesOperationExecutor extends SearchObjectsPEOperationExecu
@Autowired
private ISpaceTranslator translator;
@Autowired
private SpaceSearchManager spaceSearchManager;
@Override
protected Class<? extends SearchObjectsOperation<SpaceSearchCriteria, SpaceFetchOptions>> getOperationClass()
{
......@@ -74,7 +82,14 @@ public class SearchSpacesOperationExecutor extends SearchObjectsPEOperationExecu
@Override
protected ISearchManager<SpaceSearchCriteria, Space, Long> getSearchManager() {
throw new RuntimeException("This method is not implemented yet.");
return spaceSearchManager;
}
@Override
protected SearchObjectsOperationResult<Space> doExecute(final IOperationContext context,
final SearchObjectsOperation<SpaceSearchCriteria, SpaceFetchOptions> operation)
{
return executeDirectSQLSearch(context, operation);
}
}
......@@ -51,6 +51,15 @@ public interface ISQLAuthorisationInformationProviderDAO
*/
Set<Long> getAuthorisedProjects(Set<Long> requestedIDs, AuthorisationInformation authInfo);
/**
* Filters space IDs based on their spaces.
*
* @param requestedIDs the IDs to be filtered
* @param authInfo value object that contains space IDs, which should be related to the resulting IDs.
* @return the subset of IDs which are related either to one of the specified spaces.
*/
Set<Long> getAuthorisedSpaces(Set<Long> requestedIDs, AuthorisationInformation authInfo);
/**
* Filters tag IDs based on whether they belong to a user.
*
......@@ -59,5 +68,4 @@ public interface ISQLAuthorisationInformationProviderDAO
* @return the subset of IDs which are linked to the specified user.
*/
Set<Long> getTagsOfUser(Set<Long> requestedIDs, Long userID);
}
......@@ -163,7 +163,6 @@ public class PostgresAuthorisationInformationProviderDAO implements ISQLAuthoris
public Set<Long> getAuthorisedProjects(final Set<Long> requestedIDs, final AuthorisationInformation authInfo)
{
final String p = "p";
final String query = SELECT + SP + DISTINCT + SP + p + PERIOD + ID_COLUMN + NL +
FROM + SP + TableMapper.PROJECT.getEntitiesTable() + SP + p + NL +
WHERE + SP + p + PERIOD + ID_COLUMN + SP + IN + SP + LP + SELECT + SP + UNNEST + LP + QU + RP + RP + SP + AND +
......@@ -177,6 +176,26 @@ public class PostgresAuthorisationInformationProviderDAO implements ISQLAuthoris
return collectIDs(queryResultList);
}
@Override
public Set<Long> getAuthorisedSpaces(final Set<Long> requestedIDs, final AuthorisationInformation authInfo)
{
final String s = "s";
final String p = "p";
final String query = SELECT + SP + DISTINCT + SP + s + PERIOD + ID_COLUMN + NL +
FROM + SP + TableMapper.SPACE.getEntitiesTable() + SP + s + NL +
INNER_JOIN + SP + TableMapper.PROJECT.getEntitiesTable() + SP + p + SP +
ON + SP + p + PERIOD + SPACE_COLUMN + SP + EQ + SP + s + PERIOD + ID_COLUMN + NL +
WHERE + SP + s + PERIOD + ID_COLUMN + SP + IN + SP + LP + SELECT + SP + UNNEST + LP + QU + RP + RP + SP + AND +
SP + LP + s + PERIOD + ID_COLUMN + SP + IN + SP + LP + SELECT + SP + UNNEST + LP + QU + RP + RP + SP + OR +
SP + p + PERIOD + ID_COLUMN + SP + IN + SP + LP + SELECT + SP + UNNEST + LP + QU + RP + RP + RP;
final List<Object> args = Arrays.asList(requestedIDs.toArray(new Long[0]), authInfo.getSpaceIds().toArray(new Long[0]),
authInfo.getProjectIds().toArray(new Long[0]));
final List<Map<String, Object>> queryResultList = executor.execute(query, args);
return collectIDs(queryResultList);
}
@Override
public Set<Long> getTagsOfUser(final Set<Long> requestedIDs, final Long userID)
{
......
......@@ -51,14 +51,7 @@ public class SpaceSearchManager extends AbstractSearchManager<SpaceSearchCriteri
@Override
protected Set<Long> doFilterIDsByUserRights(final Set<Long> ids, final AuthorisationInformation authorisationInformation)
{
return authorisationInformation.getSpaceIds().stream().filter(ids::contains).collect(Collectors.toSet());
}
private CodeSearchCriteria convertToCodeSearchCriterion(final PermIdSearchCriteria permIdSearchCriteria)
{
final CodeSearchCriteria codeSearchCriteria = new CodeSearchCriteria();
codeSearchCriteria.setFieldValue(permIdSearchCriteria.getFieldValue());
return codeSearchCriteria;
return getAuthProvider().getAuthorisedSpaces(ids, authorisationInformation);
}
@Override
......
......@@ -197,31 +197,18 @@ public class SearchSpaceTest extends AbstractTest
String sessionToken = v3api.login(user.getUserId(), PASSWORD);
if (user.isDisabledProjectUser())
SearchResult<Space> result = v3api.searchSpaces(sessionToken, criteria, new SpaceFetchOptions());
if (user.isInstanceUser())
{
assertEquals(result.getObjects().size(), 2);
} else if ((user.isTestSpaceUser() || user.isTestProjectUser()) && !user.isDisabledProjectUser())
{
assertAuthorizationFailureException(new IDelegatedAction()
{
@Override
public void execute()
{
v3api.searchSpaces(sessionToken, criteria, new SpaceFetchOptions());
}
});
assertEquals(result.getObjects().size(), 1);
assertEquals(result.getObjects().get(0).getPermId(), permId2);
} else
{
SearchResult<Space> result = v3api.searchSpaces(sessionToken, criteria, new SpaceFetchOptions());
if (user.isInstanceUser())
{
assertEquals(result.getObjects().size(), 2);
} else if (user.isTestSpaceUser() || user.isTestProjectUser())
{
assertEquals(result.getObjects().size(), 1);
assertEquals(result.getObjects().get(0).getPermId(), permId2);
} else
{
assertEquals(result.getObjects().size(), 0);
}
assertEquals(result.getObjects().size(), 0);
}
v3api.logout(sessionToken);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment