You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
271 lines
8.4 KiB
271 lines
8.4 KiB
package de.superx.bianalysis.metadata.models.json; |
|
|
|
|
|
import java.util.List; |
|
|
|
import com.fasterxml.jackson.annotation.JsonIgnore; |
|
import com.fasterxml.jackson.annotation.JsonInclude; |
|
import com.fasterxml.jackson.annotation.JsonProperty; |
|
import com.fasterxml.jackson.annotation.JsonPropertyOrder; |
|
import com.fasterxml.jackson.annotation.JsonInclude.Include; |
|
|
|
import de.superx.bianalysis.FaultyMetadataException; |
|
import de.superx.bianalysis.metadata.UpsertStringBuilder; |
|
import de.superx.bianalysis.models.CriteriaGroup; |
|
|
|
@JsonInclude(Include.NON_DEFAULT) |
|
@JsonPropertyOrder({ |
|
"id", |
|
"default_release", |
|
"position", |
|
"caption", |
|
"criteria_group", |
|
"dim_column", |
|
"sort_order_column", |
|
"ref_to", |
|
"description", |
|
"fact_column" |
|
}) |
|
public class MetaDimensionAttribute extends MetaObject { |
|
|
|
@JsonProperty("dim_column") |
|
private String dimColumn; |
|
|
|
@JsonProperty("sort_order_column") |
|
private String sortOrderColumn; |
|
|
|
@JsonProperty("hierarchical_filter") |
|
private boolean hierarchicalFilter; |
|
|
|
private Integer position; |
|
|
|
@JsonIgnore |
|
private MetaDimension dimension; |
|
|
|
@JsonIgnore |
|
private MetaDimensionAttribute confDimAttrRef; |
|
|
|
@JsonProperty("ref_to") |
|
private String refTo; |
|
|
|
@JsonProperty("filter_selection") |
|
private String filterSelection; |
|
|
|
@JsonProperty("is_hidden") |
|
private boolean isHidden; |
|
|
|
@JsonProperty("criteria_groups") |
|
private List<CriteriaGroup> criteriaGroups; |
|
|
|
public MetaDimensionAttribute() { |
|
super("dimension_attribute"); |
|
} |
|
|
|
public MetaDimensionAttribute(String attrColumn) { |
|
super("dimension_attribute"); |
|
this.refTo = attrColumn; |
|
//this.refTo = dimensionTable + "." + attrColumn; |
|
} |
|
|
|
public void setConformedDimensionAttribute(MetaDimensionAttribute attribute) { |
|
this.confDimAttrRef = attribute; |
|
} |
|
|
|
@Override |
|
public UpsertStringBuilder getUpsertBuilder() { |
|
UpsertStringBuilder builder = new UpsertStringBuilder(); |
|
if(confDimAttrRef == null) { |
|
builder = super.getUpsert() |
|
.withIdCol("dimension_id", this.dimension.id) |
|
.withStringCol("columnname", this.dimColumn) |
|
.withCriteriaGroup("criteria_groups", this.criteriaGroups) |
|
.withStringCol("sort_order_column", this.sortOrderColumn) |
|
.withStringCol("filter_selection", getFilterSelectionWithDefault()) |
|
.withIntCol("position", this.position) |
|
.withStringCol("is_hidden", String.valueOf(this.isHidden)); |
|
} else { |
|
builder = new UpsertStringBuilder() |
|
.forTable("metadata", this.sourceTable) |
|
.withStringCol("namespace", this.namespace) |
|
.withIdCol("id", this.id) |
|
.withStringCol("default_release", this.defaultRelease); |
|
|
|
if(this.isHidden) { |
|
builder = builder.withStringCol("is_hidden", String.valueOf(isHidden)); |
|
} else { |
|
builder = builder.withStringCol("is_hidden", String.valueOf(confDimAttrRef.isHidden)); |
|
} |
|
|
|
if(this.position != null) { |
|
builder = builder.withIntCol("position", position); |
|
} else { |
|
builder = builder.withIntCol("position", this.confDimAttrRef.getPosition()); |
|
} |
|
|
|
if(getCaption() != null && !getCaption().isBlank()) { |
|
builder = builder.withStringCol("caption", caption); |
|
} else { |
|
builder = builder.withStringCol("caption", confDimAttrRef.getCaption()); |
|
} |
|
|
|
if(getDimColumn() != null && !getDimColumn().isBlank()) { |
|
builder = builder.withStringCol("columnname", this.dimColumn); |
|
} else { |
|
builder = builder.withStringCol("columnname", confDimAttrRef.getDimColumn()); |
|
} |
|
|
|
if(getFilterSelection() != null && !getFilterSelection().isBlank()) { |
|
builder = builder.withStringCol("filter_selection", this.filterSelection); |
|
} else { |
|
builder = builder.withStringCol("filter_selection", confDimAttrRef.getFilterSelectionWithDefault()); |
|
} |
|
|
|
if(getSortOrderColumn() != null && !getSortOrderColumn().isBlank()) { |
|
builder = builder.withStringCol("sort_order_column", this.sortOrderColumn); |
|
} else { |
|
builder = builder.withStringCol("sort_order_column", confDimAttrRef.getSortOrderColumn()); |
|
} |
|
|
|
if(getCriteriaGroups() != null && !getCriteriaGroups().isEmpty()) { |
|
builder = builder.withCriteriaGroup("criteria_groups", this.criteriaGroups); |
|
} else { |
|
builder = builder.withCriteriaGroup("criteria_groups", confDimAttrRef.getCriteriaGroups()); |
|
} |
|
|
|
builder = builder.withIdCol("dimension_id", this.dimension.id); |
|
builder = builder.withIdCol("conformed", this.confDimAttrRef.id); |
|
} |
|
|
|
if(this.dimColumn == null && criteriaGroups != null && criteriaGroups.size() >0) { |
|
String newColumnName = this.caption.toLowerCase() |
|
.replaceAll("\\s+", "_") |
|
.replaceAll("[^a-z0-9-]", "_"); |
|
builder = builder.withStringCol("columnname", "custom_" + newColumnName); |
|
} |
|
|
|
if(confDimAttrRef != null && confDimAttrRef.hierarchicalFilter) { |
|
builder = builder.withStringCol("hierarchical_filter", String.valueOf(confDimAttrRef.hierarchicalFilter)); |
|
} else { |
|
builder = builder.withStringCol("hierarchical_filter", String.valueOf(hierarchicalFilter)); |
|
} |
|
|
|
if(this.description != null && !this.description.isBlank()) { |
|
builder = builder.withStringCol("description", this.description); |
|
} else { |
|
if(confDimAttrRef != null) { |
|
builder = builder.withStringCol("description", confDimAttrRef.getDescription()); |
|
} else { |
|
builder = builder.withStringCol("description", ""); |
|
} |
|
} |
|
|
|
return builder; |
|
} |
|
|
|
public Integer getPosition() { |
|
return position; |
|
} |
|
|
|
public void setPosition(Integer position) { |
|
this.position = position; |
|
} |
|
|
|
public String getDimColumn() { |
|
return dimColumn; |
|
} |
|
|
|
public void setDimColumn(String dimColumn) { |
|
this.dimColumn = dimColumn; |
|
} |
|
|
|
public String getSortOrderColumn() { |
|
return sortOrderColumn; |
|
} |
|
|
|
public void setSortOrderColumn(String sortOrderColumn) { |
|
this.sortOrderColumn = sortOrderColumn; |
|
} |
|
|
|
public String getFilterSelection() { |
|
return filterSelection; |
|
} |
|
|
|
public void setFilterSelection(String filterSelection) { |
|
this.filterSelection = filterSelection; |
|
} |
|
|
|
public MetaDimension getDimension() { |
|
return dimension; |
|
} |
|
|
|
public void setDimension(MetaDimension dimension) { |
|
this.dimension = dimension; |
|
} |
|
|
|
public MetaDimensionAttribute getConfDimAttrRef() { |
|
return confDimAttrRef; |
|
} |
|
|
|
public void setConfDimAttrRef(MetaDimensionAttribute confDimAttrRef) { |
|
this.confDimAttrRef = confDimAttrRef; |
|
} |
|
|
|
public String getRefTo() { |
|
return refTo; |
|
} |
|
|
|
public void setRefTo(String refTo) { |
|
this.refTo = refTo; |
|
} |
|
|
|
public List<CriteriaGroup> getCriteriaGroups() { |
|
return criteriaGroups; |
|
} |
|
|
|
public void setCriteriaGroups(List<CriteriaGroup> criteriaGroups) { |
|
this.criteriaGroups = criteriaGroups; |
|
} |
|
|
|
@JsonIgnore |
|
@Override |
|
public String getDocIdentifier() { |
|
if(refTo != null) { |
|
if(this.confDimAttrRef == null) { |
|
throw new FaultyMetadataException("The Object with the id '" + this.id |
|
+ "' references a conformed attribute with the name '" + this.refTo |
|
+ "'. This Object cannot be found."); |
|
} |
|
return this.confDimAttrRef.getDocIdentifier(); |
|
} |
|
return this.dimension.getDocIdentifier()+"."+this.dimColumn; |
|
} |
|
|
|
public boolean isHierarchicalFilter() { |
|
return hierarchicalFilter; |
|
} |
|
|
|
public void setHierarchicalFilter(boolean hierarchicalFilter) { |
|
this.hierarchicalFilter = hierarchicalFilter; |
|
} |
|
|
|
@JsonIgnore |
|
public boolean isHidden() { |
|
return isHidden; |
|
} |
|
|
|
@JsonIgnore |
|
public String getFilterSelectionWithDefault() { |
|
if(this.filterSelection == null || this.filterSelection.isBlank()) { |
|
return "show_existing_only"; |
|
} |
|
return this.filterSelection; |
|
} |
|
|
|
@JsonIgnore |
|
public void setHidden(boolean isHidden) { |
|
this.isHidden = isHidden; |
|
} |
|
|
|
|
|
|
|
}
|
|
|