Advertisement
Guest User

Untitled

a guest
Apr 7th, 2020
167
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 9.35 KB | None | 0 0
  1. package com.mathesio.workflow.core.dataObject.entities;
  2.  
  3. import com.fasterxml.jackson.annotation.JsonIdentityInfo;
  4. import com.fasterxml.jackson.annotation.ObjectIdGenerators;
  5. import com.fasterxml.jackson.databind.JsonNode;
  6. import com.fasterxml.jackson.databind.node.ObjectNode;
  7. import com.mathesio.teiid.VDB.IBuilder;
  8. import com.mathesio.workflow.common.database.entities.AbstractAclResourceEntity;
  9. import com.mathesio.workflow.core.dataObject.DataObjectUtils;
  10. import com.mathesio.workflow.core.dataObject.DataObjectVerticle;
  11. import com.mathesio.workflow.core.engine.entities.behavior.impl.dataObjects.ObjectNodeConverter;
  12. import com.mathesio.workflow.core.formBuilder.entities.FormVersionDefinitionEntity;
  13. import com.mathesio.workflow.core.security.ACLModel;
  14. import org.hibernate.annotations.Formula;
  15. import org.hibernate.search.annotations.Index;
  16. import org.hibernate.search.annotations.*;
  17.  
  18. import javax.persistence.*;
  19. import javax.validation.constraints.Pattern;
  20. import java.util.*;
  21. import java.util.stream.Collectors;
  22.  
  23. /**
  24.  * AbstractDefinition of data object
  25.  *
  26.  * @author rusna on 06.10.2016.
  27.  */
  28. @Entity(name = "data_object_definition")
  29. @Table
  30. @NamedEntityGraphs({
  31.         @NamedEntityGraph(
  32.                 name = "core.dataObject.all",
  33.                 attributeNodes = {@NamedAttributeNode("columns"), @NamedAttributeNode("joins"), @NamedAttributeNode("relatedForms")})
  34. })
  35. @JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class, property = "uuid")
  36. @Indexed
  37. public class DataObjectDefinitionEntity extends AbstractAclResourceEntity {
  38.     /**
  39.      * Unique identifier of data object definition
  40.      */
  41.     @Id
  42.     @GeneratedValue
  43.     @Column(unique = true)
  44.     @Fields({
  45.             @Field(name = "uuidSort", analyze = Analyze.NO, store = Store.NO, index = Index.NO)
  46.     })
  47.     @SortableField(forField = "uuidSort")
  48.     protected UUID uuid;
  49.  
  50.     /**
  51.      * Name of data object
  52.      */
  53.     @Column
  54.     @Pattern(regexp = "([a-zA-Z0-9_]+)", message = "Data Object name can contain only [a-zA-Z0-9_]")
  55.     @Fields({
  56.             @Field,
  57.             @Field(name = "nameSort", store = Store.NO, index = Index.YES, normalizer = @Normalizer(definition = "lowercase"))
  58.     })
  59.     @SortableField(forField = "nameSort")
  60.     protected String name;
  61.  
  62.     /**
  63.      * Version of data object
  64.      */
  65.     @Column
  66.     @Fields({
  67.             @Field,
  68.             @Field(name = "versionSort", analyze = Analyze.NO, store = Store.NO, index = Index.NO)
  69.     })
  70.     @SortableField(forField = "versionSort")
  71.     protected Integer version;
  72.  
  73.     @Column(name = "claims_table_name")
  74.     protected String claimsTableName;
  75.  
  76.     @Column
  77.     @Field
  78.     protected String description;
  79.  
  80.     @OneToMany(mappedBy = "dataObject", fetch = FetchType.EAGER, targetEntity = DataObjectColumnEntity.class, cascade = {CascadeType.REFRESH, CascadeType.MERGE})
  81.     protected Set<DataObjectColumnEntity> columns = new HashSet<>();
  82.  
  83.     @OneToMany(mappedBy = "dataObject", fetch = FetchType.EAGER, targetEntity = DataObjectJoinEntity.class, cascade = {CascadeType.REFRESH, CascadeType.MERGE})
  84.     protected Set<DataObjectJoinEntity> joins = new HashSet<>();
  85.  
  86.     @OneToMany(mappedBy = "dataObjectDefinition", fetch = FetchType.EAGER, targetEntity = FormVersionDefinitionEntity.class, cascade = {CascadeType.REFRESH, CascadeType.MERGE})
  87.     protected Set<FormVersionDefinitionEntity> relatedForms = new HashSet<>();
  88.  
  89.     @Convert(converter = ObjectNodeConverter.class)
  90.     @Column(columnDefinition = "varchar", name = "where")
  91.     // It looks like there's an issue when inheriting from AbstractBehaviorDefinitionEntity - https://github.com/vladmihalcea/hibernate-types/issues/27
  92.     // The linked workaround doesn't work for me, so we'll serialize JsonNode to string using a custom converter
  93.     protected JsonNode where;
  94.  
  95.     @Column(name = "where_xml")
  96.     protected String whereXml;
  97.  
  98.     @Formula("(SELECT (version = " +
  99.             "        (SELECT MAX(dodInner.version) " +
  100.             "         FROM data_object_definition dodInner " +
  101.             "         WHERE dodInner.name = dod.name)) " +
  102.             "FROM data_object_definition dod " +
  103.             "WHERE dod.uuid =`uuid`)")
  104.     @Field
  105.     @Basic(fetch=FetchType.LAZY)
  106.     protected boolean isLatestVersion = true;
  107.  
  108.     public void setWhereXml(String whereXml) {
  109.         this.whereXml = whereXml;
  110.     }
  111.  
  112.     public String getWhereXml() {
  113.         return whereXml;
  114.     }
  115.  
  116.     public void setWhere(ObjectNode where) {
  117.         this.where = where;
  118.     }
  119.  
  120.     public JsonNode getWhere() {
  121.         return where;
  122.     }
  123.  
  124.     public Set<FormVersionDefinitionEntity> getRelatedForms() {
  125.         return relatedForms;
  126.     }
  127.  
  128.     public DataObjectDefinitionEntity setRelatedForms(Set<FormVersionDefinitionEntity> relatedForms) {
  129.         this.relatedForms = relatedForms;
  130.         return this;
  131.     }
  132.  
  133.     /**
  134.      * Privilege to view the data object.
  135.      */
  136.     public transient static final String VIEW_PRIVILEGE = "view";
  137.  
  138.     /**
  139.      * Privilege to edit definition of the data object.
  140.      */
  141.     public transient static final String EDIT_PRIVILEGE = "edit";
  142.  
  143.     /**
  144.      * Privilege to delete the data object with all its' data.
  145.      */
  146.     public transient static final String DELETE_PRIVILEGE = "delete";
  147.  
  148.     /**
  149.      * Privilege to create data in the data object.
  150.      */
  151.     public transient static final String DATA_CREATE_PRIVILEGE = "createData";
  152.  
  153.     /**
  154.      * Privilege to read all data from the data object.
  155.      */
  156.     public transient static final String DATA_READ_PRIVILEGE = "readData";
  157.  
  158.     /**
  159.      * Privilege to edit all data in the data object.
  160.      */
  161.     public transient static final String DATA_UPDATE_PRIVILEGE = "updateData";
  162.  
  163.     /**
  164.      * Privilege to delete all data in the data object.
  165.      */
  166.     public transient static final String DATA_DELETE_PRIVILEGE = "deleteData";
  167.  
  168.     /**
  169.      * Prefix used for identifying process resources.
  170.      */
  171.     public transient static final String ACL_PREFIX = DataObjectVerticle.ACL_DATA_OBJECT_PREFIX + ACLModel.ACL_NAME_DLMTR + "do";
  172.  
  173.     /**
  174.      * List of available privileges on a process.
  175.      */
  176.     public transient static final List<String> PRIVILEGES = Arrays.asList(VIEW_PRIVILEGE, EDIT_PRIVILEGE, DELETE_PRIVILEGE, DATA_CREATE_PRIVILEGE, DATA_READ_PRIVILEGE,
  177.             DATA_UPDATE_PRIVILEGE, DATA_DELETE_PRIVILEGE);
  178.  
  179.  
  180.     /**
  181.      * For hibernate.
  182.      */
  183.     public DataObjectDefinitionEntity() {
  184.     }
  185.  
  186.     public DataObjectDefinitionEntity(String name, Integer version) {
  187.         this.name = name;
  188.         this.version = version;
  189.         this.claimsTableName = DataObjectUtils.getClaimTableName(name, version);
  190.         this.columns = new HashSet<>();
  191.         this.joins = new HashSet<>();
  192.     }
  193.  
  194.     @Override
  195.     public void preRemove() {
  196.     }
  197.  
  198.     public UUID getUuid() {
  199.         return uuid;
  200.     }
  201.  
  202.     public String getName() {
  203.         return name;
  204.     }
  205.  
  206.     public void setName(String name) {
  207.         this.name = name;
  208.     }
  209.  
  210.     public Integer getVersion() {
  211.         return version;
  212.     }
  213.  
  214.     public void setVersion(Integer version) {
  215.         this.version = version;
  216.     }
  217.  
  218.     public String getTableName() {
  219.         return name + "_" + version;
  220.     }
  221.  
  222.     public String getLatestViewName() {
  223.         return name + IBuilder.LATEST_VIEW_SUFFIX;
  224.     }
  225.  
  226.     public String getClaimsTableName() {
  227.         return claimsTableName;
  228.     }
  229.  
  230.     public void setClaimsTableName(String claimsTableName) {
  231.         this.claimsTableName = claimsTableName;
  232.     }
  233.  
  234.     public String getDescription() {
  235.         return description;
  236.     }
  237.  
  238.     public void setDescription(String description) {
  239.         this.description = description;
  240.     }
  241.  
  242.     public Set<DataObjectColumnEntity> getColumns() {
  243.         return columns;
  244.     }
  245.  
  246.     public void setColumns(Set<DataObjectColumnEntity> columns) {
  247.         this.columns = columns;
  248.     }
  249.  
  250.     public void addColumn(DataObjectColumnEntity column) {
  251.         this.columns.add(column);
  252.     }
  253.  
  254.     public Set<DataObjectJoinEntity> getJoins() {
  255.         return joins;
  256.     }
  257.  
  258.     public void setJoins(Set<DataObjectJoinEntity> joins) {
  259.         this.joins = joins;
  260.     }
  261.  
  262.     public DataObjectDefinitionEntity setUuid(UUID uuid) {
  263.         this.uuid = uuid;
  264.         return this;
  265.     }
  266.  
  267.     public List<String> getPrimaryColumnNames() {
  268.         return columns.stream().filter(item -> item.isPrimaryKey()).map(item -> item.getColumnName()).collect(Collectors.toList());
  269.     }
  270.  
  271.     public String getPrimaryColumnName() {
  272.         Optional<String> res = columns.stream().filter(item -> item.isPrimaryKey()).map(item -> item.getColumnName()).findFirst();
  273.         return res.isPresent() ? res.get() : null;
  274.     }
  275.  
  276.     public DataObjectColumnEntity getColumn(String columnName) {
  277.         return getColumns().stream().filter(obj -> obj.getItemName().equals(columnName)).findFirst().orElse(null);
  278.     }
  279.  
  280.     public List<String> getColumnNames() {
  281.         return columns.stream().map(DataObjectColumnEntity::getItemName).collect(Collectors.toList());
  282.     }
  283.  
  284.     @Override
  285.     public String getAclName() {
  286.         return getAclPrefix() + ACLModel.ACL_NAME_DLMTR + uuid;
  287.     }
  288.  
  289.     @Override
  290.     public String getAclPrefix() {
  291.         return ACL_PREFIX;
  292.     }
  293.  
  294.     @Override
  295.     public List<String> getAclPrivileges() {
  296.         return PRIVILEGES;
  297.     }
  298. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement