StructuredDataContainerService.java

  1. package de.dlr.shepard.neo4Core.services;

  2. import de.dlr.shepard.mongoDB.StructuredData;
  3. import de.dlr.shepard.mongoDB.StructuredDataPayload;
  4. import de.dlr.shepard.mongoDB.StructuredDataService;
  5. import de.dlr.shepard.neo4Core.dao.PermissionsDAO;
  6. import de.dlr.shepard.neo4Core.dao.StructuredDataContainerDAO;
  7. import de.dlr.shepard.neo4Core.dao.UserDAO;
  8. import de.dlr.shepard.neo4Core.entities.Permissions;
  9. import de.dlr.shepard.neo4Core.entities.StructuredDataContainer;
  10. import de.dlr.shepard.neo4Core.io.StructuredDataContainerIO;
  11. import de.dlr.shepard.util.DateHelper;
  12. import de.dlr.shepard.util.PermissionType;
  13. import de.dlr.shepard.util.QueryParamHelper;
  14. import io.quarkus.logging.Log;
  15. import jakarta.enterprise.context.RequestScoped;
  16. import jakarta.inject.Inject;
  17. import java.util.List;

  18. @RequestScoped
  19. public class StructuredDataContainerService
  20.   implements IContainerService<StructuredDataContainer, StructuredDataContainerIO> {

  21.   private StructuredDataContainerDAO structuredDataContainerDAO;
  22.   private StructuredDataService structuredDataService;
  23.   private PermissionsDAO permissionsDAO;
  24.   private UserDAO userDAO;
  25.   private DateHelper dateHelper;

  26.   StructuredDataContainerService() {}

  27.   @Inject
  28.   public StructuredDataContainerService(
  29.     StructuredDataContainerDAO structuredDataContainerDAO,
  30.     StructuredDataService structuredDataService,
  31.     PermissionsDAO permissionsDAO,
  32.     UserDAO userDAO,
  33.     DateHelper dateHelper
  34.   ) {
  35.     this.structuredDataContainerDAO = structuredDataContainerDAO;
  36.     this.structuredDataService = structuredDataService;
  37.     this.permissionsDAO = permissionsDAO;
  38.     this.userDAO = userDAO;
  39.     this.dateHelper = dateHelper;
  40.   }

  41.   /**
  42.    * Creates a StructuredDataContainer and stores it in Neo4J
  43.    *
  44.    * @param structuredDataContainerIO to be stored
  45.    * @param username                  of the related user
  46.    * @return the created StructuredDataContainer
  47.    */
  48.   @Override
  49.   public StructuredDataContainer createContainer(StructuredDataContainerIO structuredDataContainerIO, String username) {
  50.     var user = userDAO.find(username);
  51.     String mongoid = structuredDataService.createStructuredDataContainer();
  52.     var toCreate = new StructuredDataContainer();
  53.     toCreate.setCreatedAt(dateHelper.getDate());
  54.     toCreate.setCreatedBy(user);
  55.     toCreate.setMongoId(mongoid);
  56.     toCreate.setName(structuredDataContainerIO.getName());

  57.     var created = structuredDataContainerDAO.createOrUpdate(toCreate);
  58.     permissionsDAO.createOrUpdate(new Permissions(created, user, PermissionType.Private));
  59.     return created;
  60.   }

  61.   /**
  62.    * Searches the StructuredDataContainer in Neo4j
  63.    *
  64.    * @param id identifies the searched StructuredDataContainer
  65.    * @return the StructuredDataContainer with matching id or null
  66.    */
  67.   @Override
  68.   public StructuredDataContainer getContainer(long id) {
  69.     StructuredDataContainer structuredDataContainer = structuredDataContainerDAO.findByNeo4jId(id);
  70.     if (structuredDataContainer == null || structuredDataContainer.isDeleted()) {
  71.       Log.errorf("Structured Data Container with id %s is null or deleted", id);
  72.       return null;
  73.     }
  74.     return structuredDataContainer;
  75.   }

  76.   /**
  77.    * Searches the database for all StructuredDataContainers
  78.    *
  79.    * @param params   QueryParamsHelper
  80.    * @param username the name of the user
  81.    * @return a list of StructuredDataContainers
  82.    */
  83.   @Override
  84.   public List<StructuredDataContainer> getAllContainers(QueryParamHelper params, String username) {
  85.     var containers = structuredDataContainerDAO.findAllStructuredDataContainers(params, username);
  86.     return containers;
  87.   }

  88.   /**
  89.    * Deletes a StructuredDataContainer in Neo4j
  90.    *
  91.    * @param structuredDataId identifies the StructuredDataContainer
  92.    * @param username         identifies the deleting user
  93.    * @return a boolean to determine if StructuredDataContainer was successfully
  94.    *         deleted
  95.    */
  96.   @Override
  97.   public boolean deleteContainer(long structuredDataId, String username) {
  98.     var user = userDAO.find(username);
  99.     StructuredDataContainer structuredDataContainer = structuredDataContainerDAO.findByNeo4jId(structuredDataId);
  100.     if (structuredDataContainer == null) {
  101.       return false;
  102.     }
  103.     String mongoid = structuredDataContainer.getMongoId();
  104.     structuredDataContainer.setDeleted(true);
  105.     structuredDataContainer.setUpdatedAt(dateHelper.getDate());
  106.     structuredDataContainer.setUpdatedBy(user);
  107.     structuredDataContainerDAO.createOrUpdate(structuredDataContainer);
  108.     return structuredDataService.deleteStructuredDataContainer(mongoid);
  109.   }

  110.   /**
  111.    * Upload structured data
  112.    *
  113.    * @param structuredDataContainerID identifies the container
  114.    * @param payload                   the payload to upload
  115.    * @return StructuredData with the new oid
  116.    */
  117.   public StructuredData createStructuredData(long structuredDataContainerID, StructuredDataPayload payload) {
  118.     var structuredDataContainer = structuredDataContainerDAO.findByNeo4jId(structuredDataContainerID);
  119.     if (structuredDataContainer == null || structuredDataContainer.isDeleted()) {
  120.       Log.errorf("Structured Data Container with id %s is null or deleted", structuredDataContainerID);
  121.       return null;
  122.     }
  123.     var result = structuredDataService.createStructuredData(structuredDataContainer.getMongoId(), payload);
  124.     if (result == null) {
  125.       Log.error("Failed to create structured data");
  126.       return null;
  127.     }
  128.     structuredDataContainer.addStructuredData(result);
  129.     structuredDataContainerDAO.createOrUpdate(structuredDataContainer);
  130.     return result;
  131.   }

  132.   /**
  133.    * Get uploaded structured data
  134.    *
  135.    * @param structuredDataContainerID identifies the container
  136.    * @param oid                       identifies the structured data within the
  137.    *                                  container
  138.    * @return StructuredDataPayload
  139.    */
  140.   public StructuredDataPayload getStructuredData(long structuredDataContainerID, String oid) {
  141.     var structuredDataContainer = structuredDataContainerDAO.findLightByNeo4jId(structuredDataContainerID);
  142.     if (structuredDataContainer == null || structuredDataContainer.isDeleted()) {
  143.       Log.errorf("Structured Data Container with id %s is null or deleted", structuredDataContainerID);
  144.       return null;
  145.     }
  146.     var result = structuredDataService.getPayload(structuredDataContainer.getMongoId(), oid);
  147.     return result;
  148.   }

  149.   /**
  150.    * Delete one single structured data object
  151.    *
  152.    * @param structuredDataContainerID identifies the container
  153.    * @param oid                       identifies the structured data within the
  154.    *                                  container
  155.    * @return Whether the deletion was successful or not
  156.    */
  157.   public boolean deleteStructuredData(long structuredDataContainerID, String oid) {
  158.     var structuredDataContainer = structuredDataContainerDAO.findByNeo4jId(structuredDataContainerID);
  159.     if (structuredDataContainer == null || structuredDataContainer.isDeleted()) return false;
  160.     var result = structuredDataService.deletePayload(structuredDataContainer.getMongoId(), oid);
  161.     if (result) {
  162.       var newStructuredDatas = structuredDataContainer
  163.         .getStructuredDatas()
  164.         .stream()
  165.         .filter(f -> !f.getOid().equals(oid))
  166.         .toList();
  167.       structuredDataContainer.setStructuredDatas(newStructuredDatas);
  168.       structuredDataContainerDAO.createOrUpdate(structuredDataContainer);
  169.     }
  170.     return result;
  171.   }
  172. }