Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package com.mathesio.workflow.core.dataObject.entities;
- import com.fasterxml.jackson.annotation.JsonIdentityInfo;
- import com.fasterxml.jackson.annotation.ObjectIdGenerators;
- import com.fasterxml.jackson.databind.JsonNode;
- import com.fasterxml.jackson.databind.node.ObjectNode;
- import com.mathesio.teiid.VDB.IBuilder;
- import com.mathesio.workflow.common.database.entities.AbstractAclResourceEntity;
- import com.mathesio.workflow.core.dataObject.DataObjectUtils;
- import com.mathesio.workflow.core.dataObject.DataObjectVerticle;
- import com.mathesio.workflow.core.engine.entities.behavior.impl.dataObjects.ObjectNodeConverter;
- import com.mathesio.workflow.core.formBuilder.entities.FormVersionDefinitionEntity;
- import com.mathesio.workflow.core.security.ACLModel;
- import org.hibernate.annotations.Formula;
- import org.hibernate.search.annotations.Index;
- import org.hibernate.search.annotations.*;
- import javax.persistence.*;
- import javax.validation.constraints.Pattern;
- import java.util.*;
- import java.util.stream.Collectors;
- /**
- * AbstractDefinition of data object
- *
- * @author rusna on 06.10.2016.
- */
- @Entity(name = "data_object_definition")
- @Table
- @NamedEntityGraphs({
- @NamedEntityGraph(
- name = "core.dataObject.all",
- attributeNodes = {@NamedAttributeNode("columns"), @NamedAttributeNode("joins"), @NamedAttributeNode("relatedForms")})
- })
- @JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class, property = "uuid")
- @Indexed
- public class DataObjectDefinitionEntity extends AbstractAclResourceEntity {
- /**
- * Unique identifier of data object definition
- */
- @Id
- @GeneratedValue
- @Column(unique = true)
- @Fields({
- @Field(name = "uuidSort", analyze = Analyze.NO, store = Store.NO, index = Index.NO)
- })
- @SortableField(forField = "uuidSort")
- protected UUID uuid;
- /**
- * Name of data object
- */
- @Column
- @Pattern(regexp = "([a-zA-Z0-9_]+)", message = "Data Object name can contain only [a-zA-Z0-9_]")
- @Fields({
- @Field,
- @Field(name = "nameSort", store = Store.NO, index = Index.YES, normalizer = @Normalizer(definition = "lowercase"))
- })
- @SortableField(forField = "nameSort")
- protected String name;
- /**
- * Version of data object
- */
- @Column
- @Fields({
- @Field,
- @Field(name = "versionSort", analyze = Analyze.NO, store = Store.NO, index = Index.NO)
- })
- @SortableField(forField = "versionSort")
- protected Integer version;
- @Column(name = "claims_table_name")
- protected String claimsTableName;
- @Column
- @Field
- protected String description;
- @OneToMany(mappedBy = "dataObject", fetch = FetchType.EAGER, targetEntity = DataObjectColumnEntity.class, cascade = {CascadeType.REFRESH, CascadeType.MERGE})
- protected Set<DataObjectColumnEntity> columns = new HashSet<>();
- @OneToMany(mappedBy = "dataObject", fetch = FetchType.EAGER, targetEntity = DataObjectJoinEntity.class, cascade = {CascadeType.REFRESH, CascadeType.MERGE})
- protected Set<DataObjectJoinEntity> joins = new HashSet<>();
- @OneToMany(mappedBy = "dataObjectDefinition", fetch = FetchType.EAGER, targetEntity = FormVersionDefinitionEntity.class, cascade = {CascadeType.REFRESH, CascadeType.MERGE})
- protected Set<FormVersionDefinitionEntity> relatedForms = new HashSet<>();
- @Convert(converter = ObjectNodeConverter.class)
- @Column(columnDefinition = "varchar", name = "where")
- // It looks like there's an issue when inheriting from AbstractBehaviorDefinitionEntity - https://github.com/vladmihalcea/hibernate-types/issues/27
- // The linked workaround doesn't work for me, so we'll serialize JsonNode to string using a custom converter
- protected JsonNode where;
- @Column(name = "where_xml")
- protected String whereXml;
- @Formula("(SELECT (version = " +
- " (SELECT MAX(dodInner.version) " +
- " FROM data_object_definition dodInner " +
- " WHERE dodInner.name = dod.name)) " +
- "FROM data_object_definition dod " +
- "WHERE dod.uuid =`uuid`)")
- @Field
- @Basic(fetch=FetchType.LAZY)
- protected boolean isLatestVersion = true;
- public void setWhereXml(String whereXml) {
- this.whereXml = whereXml;
- }
- public String getWhereXml() {
- return whereXml;
- }
- public void setWhere(ObjectNode where) {
- this.where = where;
- }
- public JsonNode getWhere() {
- return where;
- }
- public Set<FormVersionDefinitionEntity> getRelatedForms() {
- return relatedForms;
- }
- public DataObjectDefinitionEntity setRelatedForms(Set<FormVersionDefinitionEntity> relatedForms) {
- this.relatedForms = relatedForms;
- return this;
- }
- /**
- * Privilege to view the data object.
- */
- public transient static final String VIEW_PRIVILEGE = "view";
- /**
- * Privilege to edit definition of the data object.
- */
- public transient static final String EDIT_PRIVILEGE = "edit";
- /**
- * Privilege to delete the data object with all its' data.
- */
- public transient static final String DELETE_PRIVILEGE = "delete";
- /**
- * Privilege to create data in the data object.
- */
- public transient static final String DATA_CREATE_PRIVILEGE = "createData";
- /**
- * Privilege to read all data from the data object.
- */
- public transient static final String DATA_READ_PRIVILEGE = "readData";
- /**
- * Privilege to edit all data in the data object.
- */
- public transient static final String DATA_UPDATE_PRIVILEGE = "updateData";
- /**
- * Privilege to delete all data in the data object.
- */
- public transient static final String DATA_DELETE_PRIVILEGE = "deleteData";
- /**
- * Prefix used for identifying process resources.
- */
- public transient static final String ACL_PREFIX = DataObjectVerticle.ACL_DATA_OBJECT_PREFIX + ACLModel.ACL_NAME_DLMTR + "do";
- /**
- * List of available privileges on a process.
- */
- public transient static final List<String> PRIVILEGES = Arrays.asList(VIEW_PRIVILEGE, EDIT_PRIVILEGE, DELETE_PRIVILEGE, DATA_CREATE_PRIVILEGE, DATA_READ_PRIVILEGE,
- DATA_UPDATE_PRIVILEGE, DATA_DELETE_PRIVILEGE);
- /**
- * For hibernate.
- */
- public DataObjectDefinitionEntity() {
- }
- public DataObjectDefinitionEntity(String name, Integer version) {
- this.name = name;
- this.version = version;
- this.claimsTableName = DataObjectUtils.getClaimTableName(name, version);
- this.columns = new HashSet<>();
- this.joins = new HashSet<>();
- }
- @Override
- public void preRemove() {
- }
- public UUID getUuid() {
- return uuid;
- }
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- public Integer getVersion() {
- return version;
- }
- public void setVersion(Integer version) {
- this.version = version;
- }
- public String getTableName() {
- return name + "_" + version;
- }
- public String getLatestViewName() {
- return name + IBuilder.LATEST_VIEW_SUFFIX;
- }
- public String getClaimsTableName() {
- return claimsTableName;
- }
- public void setClaimsTableName(String claimsTableName) {
- this.claimsTableName = claimsTableName;
- }
- public String getDescription() {
- return description;
- }
- public void setDescription(String description) {
- this.description = description;
- }
- public Set<DataObjectColumnEntity> getColumns() {
- return columns;
- }
- public void setColumns(Set<DataObjectColumnEntity> columns) {
- this.columns = columns;
- }
- public void addColumn(DataObjectColumnEntity column) {
- this.columns.add(column);
- }
- public Set<DataObjectJoinEntity> getJoins() {
- return joins;
- }
- public void setJoins(Set<DataObjectJoinEntity> joins) {
- this.joins = joins;
- }
- public DataObjectDefinitionEntity setUuid(UUID uuid) {
- this.uuid = uuid;
- return this;
- }
- public List<String> getPrimaryColumnNames() {
- return columns.stream().filter(item -> item.isPrimaryKey()).map(item -> item.getColumnName()).collect(Collectors.toList());
- }
- public String getPrimaryColumnName() {
- Optional<String> res = columns.stream().filter(item -> item.isPrimaryKey()).map(item -> item.getColumnName()).findFirst();
- return res.isPresent() ? res.get() : null;
- }
- public DataObjectColumnEntity getColumn(String columnName) {
- return getColumns().stream().filter(obj -> obj.getItemName().equals(columnName)).findFirst().orElse(null);
- }
- public List<String> getColumnNames() {
- return columns.stream().map(DataObjectColumnEntity::getItemName).collect(Collectors.toList());
- }
- @Override
- public String getAclName() {
- return getAclPrefix() + ACLModel.ACL_NAME_DLMTR + uuid;
- }
- @Override
- public String getAclPrefix() {
- return ACL_PREFIX;
- }
- @Override
- public List<String> getAclPrivileges() {
- return PRIVILEGES;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement