StructuredDataContainerService.java
- package de.dlr.shepard.neo4Core.services;
- import de.dlr.shepard.mongoDB.StructuredData;
- import de.dlr.shepard.mongoDB.StructuredDataPayload;
- import de.dlr.shepard.mongoDB.StructuredDataService;
- import de.dlr.shepard.neo4Core.dao.PermissionsDAO;
- import de.dlr.shepard.neo4Core.dao.StructuredDataContainerDAO;
- import de.dlr.shepard.neo4Core.dao.UserDAO;
- import de.dlr.shepard.neo4Core.entities.Permissions;
- import de.dlr.shepard.neo4Core.entities.StructuredDataContainer;
- import de.dlr.shepard.neo4Core.io.StructuredDataContainerIO;
- import de.dlr.shepard.util.DateHelper;
- import de.dlr.shepard.util.PermissionType;
- import de.dlr.shepard.util.QueryParamHelper;
- import io.quarkus.logging.Log;
- import jakarta.enterprise.context.RequestScoped;
- import jakarta.inject.Inject;
- import java.util.List;
- @RequestScoped
- public class StructuredDataContainerService
- implements IContainerService<StructuredDataContainer, StructuredDataContainerIO> {
- private StructuredDataContainerDAO structuredDataContainerDAO;
- private StructuredDataService structuredDataService;
- private PermissionsDAO permissionsDAO;
- private UserDAO userDAO;
- private DateHelper dateHelper;
- StructuredDataContainerService() {}
- @Inject
- public StructuredDataContainerService(
- StructuredDataContainerDAO structuredDataContainerDAO,
- StructuredDataService structuredDataService,
- PermissionsDAO permissionsDAO,
- UserDAO userDAO,
- DateHelper dateHelper
- ) {
- this.structuredDataContainerDAO = structuredDataContainerDAO;
- this.structuredDataService = structuredDataService;
- this.permissionsDAO = permissionsDAO;
- this.userDAO = userDAO;
- this.dateHelper = dateHelper;
- }
- /**
- * Creates a StructuredDataContainer and stores it in Neo4J
- *
- * @param structuredDataContainerIO to be stored
- * @param username of the related user
- * @return the created StructuredDataContainer
- */
- @Override
- public StructuredDataContainer createContainer(StructuredDataContainerIO structuredDataContainerIO, String username) {
- var user = userDAO.find(username);
- String mongoid = structuredDataService.createStructuredDataContainer();
- var toCreate = new StructuredDataContainer();
- toCreate.setCreatedAt(dateHelper.getDate());
- toCreate.setCreatedBy(user);
- toCreate.setMongoId(mongoid);
- toCreate.setName(structuredDataContainerIO.getName());
- var created = structuredDataContainerDAO.createOrUpdate(toCreate);
- permissionsDAO.createOrUpdate(new Permissions(created, user, PermissionType.Private));
- return created;
- }
- /**
- * Searches the StructuredDataContainer in Neo4j
- *
- * @param id identifies the searched StructuredDataContainer
- * @return the StructuredDataContainer with matching id or null
- */
- @Override
- public StructuredDataContainer getContainer(long id) {
- StructuredDataContainer structuredDataContainer = structuredDataContainerDAO.findByNeo4jId(id);
- if (structuredDataContainer == null || structuredDataContainer.isDeleted()) {
- Log.errorf("Structured Data Container with id %s is null or deleted", id);
- return null;
- }
- return structuredDataContainer;
- }
- /**
- * Searches the database for all StructuredDataContainers
- *
- * @param params QueryParamsHelper
- * @param username the name of the user
- * @return a list of StructuredDataContainers
- */
- @Override
- public List<StructuredDataContainer> getAllContainers(QueryParamHelper params, String username) {
- var containers = structuredDataContainerDAO.findAllStructuredDataContainers(params, username);
- return containers;
- }
- /**
- * Deletes a StructuredDataContainer in Neo4j
- *
- * @param structuredDataId identifies the StructuredDataContainer
- * @param username identifies the deleting user
- * @return a boolean to determine if StructuredDataContainer was successfully
- * deleted
- */
- @Override
- public boolean deleteContainer(long structuredDataId, String username) {
- var user = userDAO.find(username);
- StructuredDataContainer structuredDataContainer = structuredDataContainerDAO.findByNeo4jId(structuredDataId);
- if (structuredDataContainer == null) {
- return false;
- }
- String mongoid = structuredDataContainer.getMongoId();
- structuredDataContainer.setDeleted(true);
- structuredDataContainer.setUpdatedAt(dateHelper.getDate());
- structuredDataContainer.setUpdatedBy(user);
- structuredDataContainerDAO.createOrUpdate(structuredDataContainer);
- return structuredDataService.deleteStructuredDataContainer(mongoid);
- }
- /**
- * Upload structured data
- *
- * @param structuredDataContainerID identifies the container
- * @param payload the payload to upload
- * @return StructuredData with the new oid
- */
- public StructuredData createStructuredData(long structuredDataContainerID, StructuredDataPayload payload) {
- var structuredDataContainer = structuredDataContainerDAO.findByNeo4jId(structuredDataContainerID);
- if (structuredDataContainer == null || structuredDataContainer.isDeleted()) {
- Log.errorf("Structured Data Container with id %s is null or deleted", structuredDataContainerID);
- return null;
- }
- var result = structuredDataService.createStructuredData(structuredDataContainer.getMongoId(), payload);
- if (result == null) {
- Log.error("Failed to create structured data");
- return null;
- }
- structuredDataContainer.addStructuredData(result);
- structuredDataContainerDAO.createOrUpdate(structuredDataContainer);
- return result;
- }
- /**
- * Get uploaded structured data
- *
- * @param structuredDataContainerID identifies the container
- * @param oid identifies the structured data within the
- * container
- * @return StructuredDataPayload
- */
- public StructuredDataPayload getStructuredData(long structuredDataContainerID, String oid) {
- var structuredDataContainer = structuredDataContainerDAO.findLightByNeo4jId(structuredDataContainerID);
- if (structuredDataContainer == null || structuredDataContainer.isDeleted()) {
- Log.errorf("Structured Data Container with id %s is null or deleted", structuredDataContainerID);
- return null;
- }
- var result = structuredDataService.getPayload(structuredDataContainer.getMongoId(), oid);
- return result;
- }
- /**
- * Delete one single structured data object
- *
- * @param structuredDataContainerID identifies the container
- * @param oid identifies the structured data within the
- * container
- * @return Whether the deletion was successful or not
- */
- public boolean deleteStructuredData(long structuredDataContainerID, String oid) {
- var structuredDataContainer = structuredDataContainerDAO.findByNeo4jId(structuredDataContainerID);
- if (structuredDataContainer == null || structuredDataContainer.isDeleted()) return false;
- var result = structuredDataService.deletePayload(structuredDataContainer.getMongoId(), oid);
- if (result) {
- var newStructuredDatas = structuredDataContainer
- .getStructuredDatas()
- .stream()
- .filter(f -> !f.getOid().equals(oid))
- .toList();
- structuredDataContainer.setStructuredDatas(newStructuredDatas);
- structuredDataContainerDAO.createOrUpdate(structuredDataContainer);
- }
- return result;
- }
- }