SpatialDataContainerService.java
package de.dlr.shepard.data.spatialdata.services;
import de.dlr.shepard.auth.permission.services.PermissionsService;
import de.dlr.shepard.auth.users.entities.User;
import de.dlr.shepard.auth.users.services.UserService;
import de.dlr.shepard.common.exceptions.InvalidAuthException;
import de.dlr.shepard.common.exceptions.InvalidPathException;
import de.dlr.shepard.common.util.DateHelper;
import de.dlr.shepard.common.util.PermissionType;
import de.dlr.shepard.common.util.QueryParamHelper;
import de.dlr.shepard.data.AbstractContainerService;
import de.dlr.shepard.data.spatialdata.daos.SpatialDataContainerDAO;
import de.dlr.shepard.data.spatialdata.io.SpatialDataContainerIO;
import de.dlr.shepard.data.spatialdata.model.SpatialDataContainer;
import io.quarkus.logging.Log;
import jakarta.enterprise.context.RequestScoped;
import jakarta.inject.Inject;
import java.util.List;
import java.util.Optional;
@RequestScoped
public class SpatialDataContainerService
extends AbstractContainerService<SpatialDataContainer, SpatialDataContainerIO> {
@Inject
SpatialDataPointService spatialDataPointService;
@Inject
SpatialDataContainerDAO containerDao;
@Inject
UserService userService;
@Inject
PermissionsService permissionsService;
@Inject
DateHelper dateHelper;
/**
* Gets the SpatialDataContainer
*
* @param id identifies the searched SpatialDataContainer
* @return the SpatialDataContainer with matching id or null
* @throws InvalidPathException if the SpatialData container cannot be found
* @throws InvalidAuthException if user has no read permission on container
*/
@Override
public SpatialDataContainer getContainer(long containerId) {
var containerOptional = this.getContainerOptional(containerId);
if (containerOptional.isEmpty()) {
String errorMsg = String.format("ID ERROR - Spatial data container with id %s is null or deleted", containerId);
Log.error(errorMsg);
throw new InvalidPathException(errorMsg);
}
assertIsAllowedToReadContainer(containerId);
return containerOptional.get();
}
private Optional<SpatialDataContainer> getContainerOptional(long containerId) {
var container = containerDao.findByNeo4jId(containerId);
if (container == null || container.isDeleted()) {
return Optional.empty();
}
return Optional.of(container);
}
@Override
public List<SpatialDataContainer> getAllContainers(QueryParamHelper params) {
User user = userService.getCurrentUser();
var containers = containerDao.findAllSpatialContainers(params, user.getUsername());
return containers;
}
@Override
public SpatialDataContainer createContainer(SpatialDataContainerIO containerIO) {
User user = userService.getCurrentUser();
SpatialDataContainer toCreate = new SpatialDataContainer();
toCreate.setCreatedAt(dateHelper.getDate());
toCreate.setCreatedBy(user);
toCreate.setName(containerIO.getName());
var created = containerDao.createOrUpdate(toCreate);
permissionsService.createPermissions(created, user, PermissionType.Private);
return created;
}
@Override
public void deleteContainer(long containerId) {
SpatialDataContainer container = getContainer(containerId);
assertIsAllowedToDeleteContainer(containerId);
User user = userService.getCurrentUser();
spatialDataPointService.deleteByContainerId(containerId);
container.setDeleted(true);
container.setUpdatedAt(dateHelper.getDate());
container.setUpdatedBy(user);
containerDao.createOrUpdate(container);
}
}