package org.zstack.header.query; import org.zstack.header.search.Inventory; import org.zstack.utils.DebugUtils; import org.zstack.utils.FieldUtils; /** */ public class ExpandedQueryStruct { private Class inventoryClassToExpand; private String expandedField; private Class inventoryClass; private String foreignKey; private String expandedInventoryKey; private Class suppressedInventoryClass; private boolean hidden; public Class getSuppressedInventoryClass() { return suppressedInventoryClass; } public void setSuppressedInventoryClass(Class suppressedInventoryClass) { this.suppressedInventoryClass = suppressedInventoryClass; } public boolean isHidden() { return hidden; } public void setHidden(boolean hidden) { this.hidden = hidden; } public String getExpandedField() { return expandedField; } public void setExpandedField(String expandedField) { this.expandedField = expandedField; } public Class getInventoryClass() { return inventoryClass; } public void setInventoryClass(Class inventoryClass) { this.inventoryClass = inventoryClass; } public String getForeignKey() { return foreignKey; } public void setForeignKey(String foreignKey) { this.foreignKey = foreignKey; } public String getExpandedInventoryKey() { return expandedInventoryKey; } public void setExpandedInventoryKey(String expandedInventoryKey) { this.expandedInventoryKey = expandedInventoryKey; } public Class getInventoryClassToExpand() { return inventoryClassToExpand; } public void setInventoryClassToExpand(Class inventoryClassToExpand) { this.inventoryClassToExpand = inventoryClassToExpand; } public static ExpandedQueryStruct fromExpandedQueryAnnotation(Class inventoryClassToExpand, ExpandedQuery at) { ExpandedQueryStruct s = new ExpandedQueryStruct(); s.inventoryClassToExpand = inventoryClassToExpand; s.inventoryClass = at.inventoryClass(); s.foreignKey = at.foreignKey(); s.expandedField = at.expandedField(); s.expandedInventoryKey = at.expandedInventoryKey(); s.hidden = at.hidden(); return s; } public void check() { DebugUtils.Assert(inventoryClass.isAnnotationPresent(Inventory.class), String.format("Inventory class[%s] claims class[%s] as its expanded query class; However, class[%s] is not annotated by @Inventory", inventoryClassToExpand.getName(), inventoryClass.getName(), inventoryClass.getName()) ); DebugUtils.Assert(FieldUtils.hasField(foreignKey, inventoryClassToExpand), String.format("Inventory class[%s] doesn't have field[%s] that is claimed as foreign key for expanded class", inventoryClassToExpand.getName(), foreignKey) ); DebugUtils.Assert(FieldUtils.hasField(expandedInventoryKey, inventoryClass), String.format("Expanded inventory class[%s] doesn't have field[%s]", inventoryClass.getName(), expandedInventoryKey) ); } }