Skip to content
Snippets Groups Projects
Verified Commit 72e2928d authored by Martin Weise's avatar Martin Weise
Browse files

More hotfixing

parent 23b7c23a
No related branches found
No related tags found
3 merge requests!268Master,!266Dev,!265Dev
...@@ -16,6 +16,7 @@ import at.tuwien.entities.database.table.columns.TableColumn; ...@@ -16,6 +16,7 @@ import at.tuwien.entities.database.table.columns.TableColumn;
import at.tuwien.entities.database.table.columns.TableColumnType; import at.tuwien.entities.database.table.columns.TableColumnType;
import at.tuwien.entities.database.table.constraints.foreignKey.ForeignKey; import at.tuwien.entities.database.table.constraints.foreignKey.ForeignKey;
import at.tuwien.entities.database.table.constraints.foreignKey.ForeignKeyReference; import at.tuwien.entities.database.table.constraints.foreignKey.ForeignKeyReference;
import at.tuwien.entities.identifier.Identifier;
import at.tuwien.exception.ImageNotSupportedException; import at.tuwien.exception.ImageNotSupportedException;
import at.tuwien.exception.QueryMalformedException; import at.tuwien.exception.QueryMalformedException;
import at.tuwien.exception.QueryStoreException; import at.tuwien.exception.QueryStoreException;
...@@ -70,6 +71,12 @@ public interface QueryMapper { ...@@ -70,6 +71,12 @@ public interface QueryMapper {
}) })
QueryBriefDto queryToQueryBriefDto(Query data); QueryBriefDto queryToQueryBriefDto(Query data);
@Mappings({
@Mapping(target = "id", source = "queryId"),
@Mapping(target = "isPersisted", expression = "java(true)"),
})
Query identifierToQuery(Identifier data);
@Named("internalMapping") @Named("internalMapping")
default String nameToInternalName(String data) { default String nameToInternalName(String data) {
if (data == null || data.length() == 0) { if (data == null || data.length() == 0) {
......
...@@ -6,9 +6,11 @@ import at.tuwien.api.database.query.ExecuteStatementDto; ...@@ -6,9 +6,11 @@ import at.tuwien.api.database.query.ExecuteStatementDto;
import at.tuwien.api.database.query.QueryResultDto; import at.tuwien.api.database.query.QueryResultDto;
import at.tuwien.api.error.ApiErrorDto; import at.tuwien.api.error.ApiErrorDto;
import at.tuwien.entities.database.Database; import at.tuwien.entities.database.Database;
import at.tuwien.entities.identifier.Identifier;
import at.tuwien.exception.*; import at.tuwien.exception.*;
import at.tuwien.querystore.Query; import at.tuwien.querystore.Query;
import at.tuwien.service.DatabaseService; import at.tuwien.service.DatabaseService;
import at.tuwien.service.IdentifierService;
import at.tuwien.service.QueryService; import at.tuwien.service.QueryService;
import at.tuwien.service.StoreService; import at.tuwien.service.StoreService;
import at.tuwien.utils.PrincipalUtil; import at.tuwien.utils.PrincipalUtil;
...@@ -35,6 +37,7 @@ import org.springframework.transaction.annotation.Transactional; ...@@ -35,6 +37,7 @@ import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import java.security.Principal; import java.security.Principal;
import java.util.List;
@Log4j2 @Log4j2
@RestController @RestController
...@@ -171,8 +174,8 @@ public class QueryEndpoint { ...@@ -171,8 +174,8 @@ public class QueryEndpoint {
AccessDeniedException, QueryNotFoundException { AccessDeniedException, QueryNotFoundException {
log.debug("endpoint re-execute query, databaseId={}, queryId={}, page={}, size={}, sortDirection={}, sortColumn={}, {}", log.debug("endpoint re-execute query, databaseId={}, queryId={}, page={}, size={}, sortDirection={}, sortColumn={}, {}",
databaseId, queryId, page, size, sortDirection, sortColumn, PrincipalUtil.formatForDebug(principal)); databaseId, queryId, page, size, sortDirection, sortColumn, PrincipalUtil.formatForDebug(principal));
final Database database = databaseService.findById(databaseId);
endpointValidator.validateDataParams(page, size, sortDirection, sortColumn); endpointValidator.validateDataParams(page, size, sortDirection, sortColumn);
endpointValidator.validateOnlyAccessOrPublic(databaseId, principal);
/* execute */ /* execute */
final Query query = storeService.findOne(databaseId, queryId, principal); final Query query = storeService.findOne(databaseId, queryId, principal);
final Long count = queryService.reExecuteCount(databaseId, query, principal); final Long count = queryService.reExecuteCount(databaseId, query, principal);
......
...@@ -6,16 +6,15 @@ import at.tuwien.api.database.query.QueryPersistDto; ...@@ -6,16 +6,15 @@ import at.tuwien.api.database.query.QueryPersistDto;
import at.tuwien.api.error.ApiErrorDto; import at.tuwien.api.error.ApiErrorDto;
import at.tuwien.api.identifier.IdentifierDto; import at.tuwien.api.identifier.IdentifierDto;
import at.tuwien.api.user.UserDto; import at.tuwien.api.user.UserDto;
import at.tuwien.entities.database.Database;
import at.tuwien.entities.identifier.Identifier; import at.tuwien.entities.identifier.Identifier;
import at.tuwien.entities.identifier.IdentifierType;
import at.tuwien.exception.*; import at.tuwien.exception.*;
import at.tuwien.mapper.IdentifierMapper; import at.tuwien.mapper.IdentifierMapper;
import at.tuwien.mapper.QueryMapper; import at.tuwien.mapper.QueryMapper;
import at.tuwien.mapper.UserMapper; import at.tuwien.mapper.UserMapper;
import at.tuwien.querystore.Query; import at.tuwien.querystore.Query;
import at.tuwien.service.AccessService; import at.tuwien.service.*;
import at.tuwien.service.IdentifierService;
import at.tuwien.service.StoreService;
import at.tuwien.service.UserService;
import at.tuwien.utils.PrincipalUtil; import at.tuwien.utils.PrincipalUtil;
import at.tuwien.utils.UserUtil; import at.tuwien.utils.UserUtil;
import at.tuwien.validation.EndpointValidator; import at.tuwien.validation.EndpointValidator;
...@@ -54,19 +53,21 @@ public class StoreEndpoint { ...@@ -54,19 +53,21 @@ public class StoreEndpoint {
private final UserService userService; private final UserService userService;
private final StoreService storeService; private final StoreService storeService;
private final AccessService accessService; private final AccessService accessService;
private final DatabaseService databaseService;
private final IdentifierMapper identifierMapper; private final IdentifierMapper identifierMapper;
private final EndpointValidator endpointValidator; private final EndpointValidator endpointValidator;
private final IdentifierService identifierService; private final IdentifierService identifierService;
@Autowired @Autowired
public StoreEndpoint(UserMapper userMapper, QueryMapper queryMapper, UserService userService, StoreService storeService, public StoreEndpoint(UserMapper userMapper, QueryMapper queryMapper, UserService userService, StoreService storeService,
AccessService accessService, IdentifierMapper identifierMapper, AccessService accessService, DatabaseService databaseService, IdentifierMapper identifierMapper,
EndpointValidator endpointValidator, IdentifierService identifierService) { EndpointValidator endpointValidator, IdentifierService identifierService) {
this.userMapper = userMapper; this.userMapper = userMapper;
this.queryMapper = queryMapper; this.queryMapper = queryMapper;
this.userService = userService; this.userService = userService;
this.storeService = storeService; this.storeService = storeService;
this.accessService = accessService; this.accessService = accessService;
this.databaseService = databaseService;
this.identifierMapper = identifierMapper; this.identifierMapper = identifierMapper;
this.endpointValidator = endpointValidator; this.endpointValidator = endpointValidator;
this.identifierService = identifierService; this.identifierService = identifierService;
...@@ -125,14 +126,23 @@ public class StoreEndpoint { ...@@ -125,14 +126,23 @@ public class StoreEndpoint {
DatabaseConnectionException, TableMalformedException, UserNotFoundException, NotAllowedException, DatabaseConnectionException, TableMalformedException, UserNotFoundException, NotAllowedException,
AccessDeniedException { AccessDeniedException {
log.debug("endpoint list queries, databaseId={}, persisted={}, {}", databaseId, persisted, PrincipalUtil.formatForDebug(principal)); log.debug("endpoint list queries, databaseId={}, persisted={}, {}", databaseId, persisted, PrincipalUtil.formatForDebug(principal));
endpointValidator.validateOnlyAccessOrPublic(databaseId, principal); final Database database = databaseService.findById(databaseId);
/* find all from data database */ /* find all from data database */
final List<Query> queries = storeService.findAll(databaseId, persisted, principal);
/* add identifiers and creator from metadata database */
final List<IdentifierDto> identifiers = identifierService.findAllSubsetIdentifiers() final List<IdentifierDto> identifiers = identifierService.findAllSubsetIdentifiers()
.stream() .stream()
.map(identifierMapper::identifierToIdentifierDto) .map(identifierMapper::identifierToIdentifierDto)
.toList(); .toList();
final List<Query> queries;
if (!database.getIsPublic() && principal == null) {
queries = identifierService.findAllSubsetIdentifiers()
.stream()
.filter(i -> i.getType().equals(IdentifierType.SUBSET))
.map(queryMapper::identifierToQuery)
.toList();
} else {
queries = storeService.findAll(databaseId, persisted, principal);
}
/* add identifiers and creator from metadata database */
final List<UserDto> users = userService.findAll() final List<UserDto> users = userService.findAll()
.stream() .stream()
.map(userMapper::userToUserDto) .map(userMapper::userToUserDto)
......
...@@ -291,7 +291,8 @@ public class ViewEndpoint { ...@@ -291,7 +291,8 @@ public class ViewEndpoint {
/* check */ /* check */
endpointValidator.validateDataParams(page, size); endpointValidator.validateDataParams(page, size);
final Database database = databaseService.find(databaseId); final Database database = databaseService.find(databaseId);
if (!database.getIsPublic()) { final View view = viewService.findById(databaseId, viewId, principal);
if (!database.getIsPublic() && !view.getIsPublic()) {
if (principal == null) { if (principal == null) {
log.error("Failed to view data of private view: principal is null"); log.error("Failed to view data of private view: principal is null");
throw new NotAllowedException("Failed to view data of private view: principal is null"); throw new NotAllowedException("Failed to view data of private view: principal is null");
...@@ -312,7 +313,6 @@ public class ViewEndpoint { ...@@ -312,7 +313,6 @@ public class ViewEndpoint {
} }
/* find */ /* find */
log.debug("find view data for database with id {}", databaseId); log.debug("find view data for database with id {}", databaseId);
final View view = viewService.findById(databaseId, viewId, principal);
final Long count = queryService.viewCount(databaseId, view, principal); final Long count = queryService.viewCount(databaseId, view, principal);
final HttpHeaders headers = new HttpHeaders(); final HttpHeaders headers = new HttpHeaders();
headers.set("X-Count", "" + count); headers.set("X-Count", "" + count);
......
...@@ -3,6 +3,7 @@ package at.tuwien.service.impl; ...@@ -3,6 +3,7 @@ package at.tuwien.service.impl;
import at.tuwien.api.database.query.ExecuteStatementDto; import at.tuwien.api.database.query.ExecuteStatementDto;
import at.tuwien.api.database.query.QueryPersistDto; import at.tuwien.api.database.query.QueryPersistDto;
import at.tuwien.entities.database.Database; import at.tuwien.entities.database.Database;
import at.tuwien.entities.identifier.Identifier;
import at.tuwien.entities.user.User; import at.tuwien.entities.user.User;
import at.tuwien.exception.*; import at.tuwien.exception.*;
import at.tuwien.mapper.StoreMapper; import at.tuwien.mapper.StoreMapper;
......
...@@ -66,6 +66,7 @@ ...@@ -66,6 +66,7 @@
:text="$t('navigation.info')" :text="$t('navigation.info')"
:to="`/database/${$route.params.database_id}/subset/${$route.params.subset_id}/info`" /> :to="`/database/${$route.params.database_id}/subset/${$route.params.subset_id}/info`" />
<v-tab <v-tab
v-if="canViewData"
:text="$t('navigation.data')" :text="$t('navigation.data')"
:to="`/database/${$route.params.database_id}/subset/${$route.params.subset_id}/data`" /> :to="`/database/${$route.params.database_id}/subset/${$route.params.subset_id}/data`" />
</v-tabs> </v-tabs>
...@@ -120,6 +121,12 @@ export default { ...@@ -120,6 +121,12 @@ export default {
} }
return this.database.subsets.filter(s => s.query_id === Number(this.$route.params.subset_id)) return this.database.subsets.filter(s => s.query_id === Number(this.$route.params.subset_id))
}, },
canViewData () {
if (!this.database) {
return false
}
return this.database.is_public
},
identifier () { identifier () {
/* mount pid */ /* mount pid */
if (this.pid) { if (this.pid) {
......
...@@ -17,6 +17,7 @@ ...@@ -17,6 +17,7 @@
<v-divider <v-divider
v-if="subset && identifier" /> v-if="subset && identifier" />
<v-card <v-card
v-if="subset"
variant="flat" variant="flat"
rounded="0" rounded="0"
:title="$t('pages.subset.title')"> :title="$t('pages.subset.title')">
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment