📄 modelviewentity.java
字号:
while (fldsIt.hasNext()) {
ModelField field = (ModelField) fldsIt.next();
returnString.append(field.colName);
if (alias) {
ModelAlias modelAlias = this.getAlias(field.name);
if (modelAlias != null) {
returnString.append(" AS " + modelAlias.colAlias);
}
}
if (fldsIt.hasNext()) {
returnString.append(separator);
}
}
returnString.append(afterLast);
return returnString.toString();
}
public ModelEntity getAliasedEntity(String entityAlias, ModelReader modelReader) {
ModelMemberEntity modelMemberEntity = (ModelMemberEntity) this.memberModelMemberEntities.get(entityAlias);
if (modelMemberEntity == null) {
Debug.logError("No member entity with alias " + entityAlias + " found in view-entity " + this.getEntityName() + "; this view-entity will NOT be usable...", module);
return null;
}
String aliasedEntityName = modelMemberEntity.getEntityName();
ModelEntity aliasedEntity = modelReader.getModelEntityNoCheck(aliasedEntityName);
if (aliasedEntity == null) {
Debug.logError("[ModelViewEntity.populateFields] ERROR: could not find ModelEntity for entity name: " + aliasedEntityName, module);
return null;
}
return aliasedEntity;
}
public ModelField getAliasedField(ModelEntity aliasedEntity, String field, ModelReader modelReader) {
ModelField aliasedField = aliasedEntity.getField(field);
if (aliasedEntity == null) {
Debug.logError("[ModelViewEntity.populateFields] ERROR: could not find ModelEntity for entity name: " + aliasedEntity.getEntityName(), module);
return null;
}
return aliasedField;
}
public void populateFields(ModelReader modelReader) {
if (this.memberModelEntities == null) {
this.memberModelEntities = new HashMap();
}
Iterator meIter = memberModelMemberEntities.entrySet().iterator();
while (meIter.hasNext()) {
Map.Entry entry = (Map.Entry) meIter.next();
ModelMemberEntity modelMemberEntity = (ModelMemberEntity) entry.getValue();
String aliasedEntityName = modelMemberEntity.getEntityName();
ModelEntity aliasedEntity = modelReader.getModelEntityNoCheck(aliasedEntityName);
if (aliasedEntity == null) {
continue;
}
memberModelEntities.put(entry.getKey(), aliasedEntity);
}
expandAllAliasAlls(modelReader);
for (int i = 0; i < aliases.size(); i++) {
ModelAlias alias = (ModelAlias) aliases.get(i);
ModelField field = new ModelField();
field.name = alias.name;
// if this is a groupBy field, add it to the groupBys list
if (alias.groupBy) {
this.groupBys.add(field);
}
// show a warning if function is specified and groupBy is true
if (UtilValidate.isNotEmpty(alias.function) && alias.groupBy) {
Debug.logWarning("The view-entity alias with name=" + alias.name + " has a function value and is specified as a group-by field; this may be an error, but is not necessarily.", module);
}
if (alias.isComplexAlias()) {
// if this is a complex alias, make a complex column name...
StringBuffer colNameBuffer = new StringBuffer();
StringBuffer fieldTypeBuffer = new StringBuffer();
alias.makeAliasColName(colNameBuffer, fieldTypeBuffer, this, modelReader);
field.colName = colNameBuffer.toString();
field.type = fieldTypeBuffer.toString();
field.isPk = false;
} else {
ModelEntity aliasedEntity = getAliasedEntity(alias.entityAlias, modelReader);
ModelField aliasedField = getAliasedField(aliasedEntity, alias.field, modelReader);
if (aliasedField == null) {
Debug.logError("[ModelViewEntity.populateFields] ERROR: could not find ModelField for field name \"" +
alias.field + "\" on entity with name: " + aliasedEntity.getEntityName(), module);
continue;
}
if (alias.isPk != null) {
field.isPk = alias.isPk.booleanValue();
} else {
field.isPk = aliasedField.isPk;
}
field.type = aliasedField.type;
field.validators = aliasedField.validators;
field.colName = alias.entityAlias + "." + SqlJdbcUtil.filterColName(aliasedField.colName);
}
this.fields.add(field);
if (field.isPk) {
this.pks.add(field);
} else {
this.nopks.add(field);
}
if ("count".equals(alias.function) || "count-distinct".equals(alias.function)) {
// if we have a "count" function we have to change the type
field.type = "numeric";
}
if (UtilValidate.isNotEmpty(alias.function)) {
String prefix = (String) functionPrefixMap.get(alias.function);
if (prefix == null) {
Debug.logWarning("Specified alias function [" + alias.function + "] not valid; must be: min, max, sum, avg, count or count-distinct; using a column name with no function function", module);
} else {
field.colName = prefix + field.colName + ")";
}
}
}
}
/**
* Go through all aliasAlls and create an alias for each field of each member entity
*/
private void expandAllAliasAlls(ModelReader modelReader) {
Iterator aliasAllIter = aliasAlls.iterator();
while (aliasAllIter.hasNext()) {
ModelAliasAll aliasAll = (ModelAliasAll) aliasAllIter.next();
String prefix = aliasAll.getPrefix();
ModelMemberEntity modelMemberEntity = (ModelMemberEntity) memberModelMemberEntities.get(aliasAll.getEntityAlias());
if (modelMemberEntity == null) {
Debug.logError("Member entity referred to in alias-all not found, ignoring: " + aliasAll.getEntityAlias(), module);
continue;
}
String aliasedEntityName = modelMemberEntity.getEntityName();
ModelEntity aliasedEntity = modelReader.getModelEntityNoCheck(aliasedEntityName);
if (aliasedEntity == null) {
Debug.logError("Entity referred to in member-entity " + aliasAll.getEntityAlias() + " not found, ignoring: " + aliasedEntityName, module);
continue;
}
List entFieldList = aliasedEntity.getAllFieldNames();
if (entFieldList == null) {
Debug.logError("Entity referred to in member-entity " + aliasAll.getEntityAlias() + " has no fields, ignoring: " + aliasedEntityName, module);
continue;
}
Iterator fieldnamesIterator = entFieldList.iterator();
while (fieldnamesIterator.hasNext()) {
// now merge the lists, leaving out any that duplicate an existing alias name
String fieldName = (String) fieldnamesIterator.next();
String aliasName = fieldName;
ModelField modelField = aliasedEntity.getField(fieldName);
if (modelField.getIsAutoCreatedInternal()) {
// never auto-alias these
continue;
}
if (UtilValidate.isNotEmpty(prefix)) {
StringBuffer newAliasBuffer = new StringBuffer(prefix);
//make sure the first letter is uppercase to delineate the field name
newAliasBuffer.append(Character.toUpperCase(aliasName.charAt(0)));
newAliasBuffer.append(aliasName.substring(1));
aliasName = newAliasBuffer.toString();
}
ModelAlias existingAlias = this.getAlias(aliasName);
if (existingAlias != null) {
//log differently if this is part of a view-link key-map because that is a common case when a field will be auto-expanded multiple times
boolean isInViewLink = false;
Iterator viewLinkIter = this.getViewLinksIterator();
while (viewLinkIter.hasNext() && !isInViewLink) {
ModelViewLink modelViewLink = (ModelViewLink) viewLinkIter.next();
boolean isRel = false;
if (modelViewLink.getRelEntityAlias().equals(aliasAll.getEntityAlias())) {
isRel = true;
} else if (!modelViewLink.getEntityAlias().equals(aliasAll.getEntityAlias())) {
// not the rel-entity-alias or the entity-alias, so move along
continue;
}
Iterator keyMapIter = modelViewLink.getKeyMapsIterator();
while (keyMapIter.hasNext() && !isInViewLink) {
ModelKeyMap modelKeyMap = (ModelKeyMap) keyMapIter.next();
if (!isRel && modelKeyMap.getFieldName().equals(fieldName)) {
isInViewLink = true;
} else if (isRel && modelKeyMap.getRelFieldName().equals(fieldName)) {
isInViewLink = true;
}
}
}
//already exists, oh well... probably an override, but log just in case
String warnMsg = "Throwing out field alias in view entity " + this.getEntityName() + " because one already exists with the name: " + aliasName;
if (isInViewLink) {
Debug.logVerbose(warnMsg, module);
} else {
Debug.logInfo(warnMsg, module);
}
continue;
}
ModelAlias expandedAlias = new ModelAlias();
expandedAlias.name = aliasName;
expandedAlias.field = fieldName;
expandedAlias.entityAlias = aliasAll.getEntityAlias();
expandedAlias.isFromAliasAll = true;
expandedAlias.colAlias = ModelUtil.javaNameToDbName(UtilXml.checkEmpty(expandedAlias.name));
aliases.add(expandedAlias);
}
}
}
public static class ModelMemberEntity {
protected String entityAlias = "";
protected String entityName = "";
public ModelMemberEntity(String entityAlias, String entityName) {
this.entityAlias = entityAlias;
this.entityName = entityName;
}
public String getEntityAlias() {
return this.entityAlias;
}
public String getEntityName() {
return this.entityName;
}
}
public static class ModelAliasAll {
protected String entityAlias = "";
protected String prefix = "";
protected ModelAliasAll() {}
public ModelAliasAll(String entityAlias, String prefix) {
this.entityAlias = entityAlias;
this.prefix = prefix;
}
public ModelAliasAll(Element aliasAllElement) {
this.entityAlias = UtilXml.checkEmpty(aliasAllElement.getAttribute("entity-alias"));
this.prefix = UtilXml.checkEmpty(aliasAllElement.getAttribute("prefix"));
}
public String getEntityAlias() {
return this.entityAlias;
}
public String getPrefix() {
return this.prefix;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -