
org.hotrod.metadata.StructuredColumnMetadata Maven / Gradle / Ivy
package org.hotrod.metadata;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import org.hotrod.config.AbstractConfigurationTag;
import org.hotrod.config.ColumnTag;
import org.hotrod.config.structuredcolumns.ColumnsProvider;
import org.hotrod.database.DatabaseAdapter;
import org.hotrod.exceptions.InvalidIdentifierException;
import org.hotrod.exceptions.UnresolvableDataTypeException;
public class StructuredColumnMetadata extends ColumnMetadata implements Serializable {
private static final long serialVersionUID = 1L;
// Properties
private String entityPrefix;
private String columnAlias;
private String formula;
private boolean id;
private AbstractConfigurationTag tag;
private ColumnsProvider columnsProvider;
// Constructor
public StructuredColumnMetadata(final ColumnMetadata cm, final String entityPrefix, final String columnAlias,
final boolean id, final AbstractConfigurationTag tag) {
super(cm);
this.entityPrefix = entityPrefix;
this.columnAlias = columnAlias;
this.formula = null;
this.id = id;
this.tag = tag;
this.columnsProvider = null;
}
public StructuredColumnMetadata(final ColumnMetadata cm, final String entityPrefix, final String columnAlias,
final boolean id, final AbstractConfigurationTag tag, final ColumnsProvider columnsProvider) {
super(cm);
this.entityPrefix = entityPrefix;
this.columnAlias = columnAlias;
this.formula = null;
this.id = id;
this.tag = tag;
this.columnsProvider = columnsProvider;
}
// Behavior
public static StructuredColumnMetadata applyColumnTag(final StructuredColumnMetadata orig, final ColumnTag t,
final AbstractConfigurationTag tag, final DatabaseAdapter adapter)
throws UnresolvableDataTypeException, InvalidIdentifierException {
ColumnMetadata cm = ColumnMetadata.applyColumnTag(orig, t, adapter);
return new StructuredColumnMetadata(cm, orig.entityPrefix, orig.columnAlias, orig.id, tag);
}
// Setters
public void setId(final boolean id) {
this.id = id;
}
public void setFormula(final String formula) {
this.formula = formula;
}
// Getters
public String getColumnAlias() {
return columnAlias;
}
public String getFormula() {
return formula;
}
public boolean isId() {
return id;
}
public String getEntityPrefix() {
return entityPrefix;
}
public AbstractConfigurationTag getTag() {
return this.tag;
}
public ColumnsProvider getColumnsProvider() {
return columnsProvider;
}
// Rendering
public String renderAliasedSQLColumn() {
if (this.formula == null) {
return this.entityPrefix + "." + super.getId().getRenderedSQLName() + " as " + this.columnAlias;
} else {
return this.formula + " as " + this.columnAlias;
}
}
// Utilities
public static List promote(final String entityPrefix, final List cols,
final String aliasPrefix) {
if (aliasPrefix == null) {
throw new IllegalArgumentException("aliasPrefix cannot be null!");
}
List columns = new ArrayList();
for (ColumnMetadata cm : cols) {
StructuredColumnMetadata m = new StructuredColumnMetadata(cm, entityPrefix, aliasPrefix + cm.getColumnName(),
cm.belongsToPK(), null);
columns.add(m);
}
return columns;
}
public static List promote(final String entityPrefix, final List cols,
final String aliasPrefix, final Set idNames) throws IdColumnNotFoundException {
if (aliasPrefix == null) {
throw new IllegalArgumentException("aliasPrefix cannot be null!");
}
for (String idName : idNames) {
if (!idIsColumn(cols, idName)) {
throw new IdColumnNotFoundException(idName);
}
}
List columns = new ArrayList();
for (ColumnMetadata cm : cols) {
boolean id = columnIsId(cm, idNames);
StructuredColumnMetadata m = new StructuredColumnMetadata(cm, entityPrefix, aliasPrefix + cm.getColumnName(), id,
null);
columns.add(m);
}
return columns;
}
private static boolean columnIsId(final ColumnMetadata cm, final Set idNames) {
for (String idName : idNames) {
if (cm.isConfigurationName(idName)) {
return true;
}
}
return false;
}
private static boolean idIsColumn(final List cols, final String idName) {
for (ColumnMetadata cm : cols) {
if (cm.isConfigurationName(idName)) {
return true;
}
}
return false;
}
public static class IdColumnNotFoundException extends Exception {
private static final long serialVersionUID = 1L;
private String idName;
public IdColumnNotFoundException(final String idName) {
super();
this.idName = idName;
}
public String getIdName() {
return idName;
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy