SuperX-Kernmodul
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

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;
}
}