package de.superx.bianalysis.models; import java.util.Comparator; import java.util.List; import java.util.Objects; import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.databind.node.ArrayNode; import de.superx.bianalysis.metadata.Identifier; import de.superx.bianalysis.repository.dto.AttributeDto; public class DimensionAttribute { public static final List SPECIAL_VALUES = List.of("n. v.", "k.A.", "k.a.", "unbekannt", "Unbekannt", "ungültig", "Ungültig"); public static final Comparator SPECIAL_VALUE_COMPARATOR = (a1, a2) -> { if (a1.equals(a2)) { return 0; } if (DimensionAttribute.SPECIAL_VALUES.contains(a1)) { return -1; } if (DimensionAttribute.SPECIAL_VALUES.contains(a2)) { return 1; } return a1.compareTo(a2); }; public static String specialValueListForSql() { String result = String.join("', '", SPECIAL_VALUES); return "'" + result + "'"; } @JsonIgnore private AttributeDto attributeTable; @JsonIgnore private String dimCaption; @JsonIgnore private String dimId; @JsonIgnore private String dimConformedId; @JsonIgnore private String tablename; @JsonIgnore private String joincolumn; @JsonIgnore private boolean isHistorical; @JsonIgnore private String dimensionTableAlias; @JsonIgnore private String dimensionColumnAlias; private List dimensionAttributeValues; private ArrayNode criteriaGroups; @JsonIgnore private String dimIdJoinColumn; @JsonIgnore private boolean isGrouping = false; @JsonIgnore private boolean isNullAttribute = false; public DimensionAttribute() { super(); } public DimensionAttribute(AttributeDto attributeTable) { this.attributeTable = attributeTable; } public void setDimension(Dimension dim) { this.dimCaption = dim.getCaption(); this.dimId = dim.getId().composedId; this.tablename = dim.getTablename(); this.joincolumn = dim.getJoincolumn(); this.isHistorical = dim.isHistorical(); this.dimIdJoinColumn = dim.getIdColumn(); if(dim.getAlias() != null){ this.dimensionTableAlias = dim.getAlias(); } else { this.dimensionTableAlias = generateDimensionTableAlias(joincolumn); } this.dimensionColumnAlias = getColumnname() + "_" + getId().value; } public static String generateDimensionTableAlias(String joincolumn) { if (joincolumn != null) { return joincolumn.replaceFirst("_(id|lid)$", ""); } return null; } @Override public int hashCode() { return Objects.hash(getId()); } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; DimensionAttribute other = (DimensionAttribute) obj; return Objects.equals(this.getId(), other.getId()); } public String getCaption() { return this.attributeTable.caption; } public boolean isHidden() { if(this.attributeTable.isHidden == null) { return false; } return this.attributeTable.isHidden.booleanValue(); } public boolean isCustom() { return this.attributeTable.isCustom != null && this.attributeTable.isCustom.booleanValue(); } public String getColumnname() { return this.attributeTable.columnname; } public String getSortOrderColumn() { return this.attributeTable.sortOrderColumn; } public String getFilterSelection() { return this.attributeTable.filterSelection; } public String getDimId() { return dimId; } public void setDimId(String dimId) { this.dimId = dimId; } public String getDimConformedId() { return dimConformedId; } public void setDimConformedId(String dimConformedId) { this.dimConformedId = dimConformedId; } public String getAttrConformedId() { return this.attributeTable.attrConformedId; } public Identifier getId() { return this.attributeTable.id; } @JsonIgnore public String getStringId() { return this.attributeTable.id.composedId; } public String getDimCaption() { return dimCaption; } public void setDimCaption(String dimCaption) { this.dimCaption = dimCaption; } public String getDimensionTableAlias() { return dimensionTableAlias; } public void setDimensionTableAlias(String dimensionTableAlias) { this.dimensionTableAlias = dimensionTableAlias; } public String getDimensionColumnAlias() { return dimensionColumnAlias; } public void setDimensionColumnAlias(String dimensionColumnAlias) { this.dimensionColumnAlias = dimensionColumnAlias; } public String getDescription() { return this.attributeTable.description; } public Identifier getDimensionId() { return this.attributeTable.dimensionId; } public String getTablename() { return tablename; } public void setTablename(String tablename) { this.tablename = tablename; } public String getJoincolumn() { return joincolumn; } public void setJoincolumn(String joincolumn) { this.joincolumn = joincolumn; } public boolean isHistorical() { return isHistorical; } public void setHistorical(boolean isHistorical) { this.isHistorical = isHistorical; } public boolean isHierarchicalFilter() { if(this.attributeTable.hierarchicalFilter == null) { return false; } return this.attributeTable.hierarchicalFilter.booleanValue(); } public List getDimensionAttributeValues() { return dimensionAttributeValues; } public void setDimensionAttributeValues(List dimensionAttributeValues) { this.dimensionAttributeValues = dimensionAttributeValues; } public void setDimIdJoinColumn(String idColumn) { this.dimIdJoinColumn = idColumn; } public String getDimIdJoinColumn() { return this.dimIdJoinColumn; } public void setAttrConformedId(String stringId) { this.attributeTable.attrConformedId = stringId; } public Integer getPosition() { return this.attributeTable.position; } public String getDefaultRelease() { return this.attributeTable.defaultRelease; } public ArrayNode getCriteriaGroups() { return this.attributeTable.criteriaGroups; } public void setCriteriaGroups(ArrayNode criteriaGroups) { this.criteriaGroups = criteriaGroups; } @JsonIgnore public boolean isGrouping() { return isGrouping; } @JsonIgnore public void setGrouping(boolean isGrouping) { this.isGrouping = isGrouping; } @JsonIgnore public boolean isNullAttribute() { return isNullAttribute; } @JsonIgnore public void setNullAttribute(boolean isNullAttribute) { this.isNullAttribute = isNullAttribute; } }