diff --git a/src/main/java/com/avaje/ebeaninternal/server/deploy/parse/DeployInherit.java b/src/main/java/com/avaje/ebeaninternal/server/deploy/parse/DeployInherit.java index de5136df5..e6fc22b58 100644 --- a/src/main/java/com/avaje/ebeaninternal/server/deploy/parse/DeployInherit.java +++ b/src/main/java/com/avaje/ebeaninternal/server/deploy/parse/DeployInherit.java @@ -1,161 +1,160 @@ package com.avaje.ebeaninternal.server.deploy.parse; +import com.avaje.ebeaninternal.server.core.BootupClasses; +import com.avaje.ebeaninternal.server.deploy.InheritInfo; +import com.avaje.ebeaninternal.server.deploy.meta.DeployBeanDescriptor; + +import javax.persistence.DiscriminatorColumn; +import javax.persistence.DiscriminatorType; +import javax.persistence.DiscriminatorValue; +import javax.persistence.Inheritance; import java.lang.annotation.Annotation; import java.sql.Types; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; -import javax.persistence.DiscriminatorColumn; -import javax.persistence.DiscriminatorType; -import javax.persistence.DiscriminatorValue; -import javax.persistence.Inheritance; - -import com.avaje.ebeaninternal.server.core.BootupClasses; -import com.avaje.ebeaninternal.server.deploy.InheritInfo; -import com.avaje.ebeaninternal.server.deploy.meta.DeployBeanDescriptor; - /** * Builds the InheritInfo deployment information. */ public class DeployInherit { - private final Map, DeployInheritInfo> deployMap = new LinkedHashMap, DeployInheritInfo>(); + private final Map, DeployInheritInfo> deployMap = new LinkedHashMap, DeployInheritInfo>(); - private final Map, InheritInfo> finalMap = new LinkedHashMap, InheritInfo>(); + private final Map, InheritInfo> finalMap = new LinkedHashMap, InheritInfo>(); - private final BootupClasses bootupClasses; - - /** - * Create the InheritInfoDeploy. - */ - public DeployInherit(BootupClasses bootupClasses) { - this.bootupClasses = bootupClasses; - initialise(); - } + private final BootupClasses bootupClasses; - public void process(DeployBeanDescriptor desc) { - InheritInfo inheritInfo = finalMap.get(desc.getBeanType()); - desc.setInheritInfo(inheritInfo); - } + /** + * Create the InheritInfoDeploy. + */ + public DeployInherit(BootupClasses bootupClasses) { + this.bootupClasses = bootupClasses; + initialise(); + } - private void initialise() { - List> entityList = bootupClasses.getEntities(); + public void process(DeployBeanDescriptor desc) { + InheritInfo inheritInfo = finalMap.get(desc.getBeanType()); + desc.setInheritInfo(inheritInfo); + } - findInheritClasses(entityList); - buildDeployTree(); - buildFinalTree(); - } + private void initialise() { + List> entityList = bootupClasses.getEntities(); - private void findInheritClasses(List> entityList) { + findInheritClasses(entityList); + buildDeployTree(); + buildFinalTree(); + } - // go through each class and initialise the info object... - for (Class cls : entityList) { - if (isInheritanceClass(cls)) { - DeployInheritInfo info = createInfo(cls); - deployMap.put(cls, info); - } - } - } + private void findInheritClasses(List> entityList) { - private void buildDeployTree() { + // go through each class and initialise the info object... + for (Class cls : entityList) { + if (isInheritanceClass(cls)) { + DeployInheritInfo info = createInfo(cls); + deployMap.put(cls, info); + } + } + } - for (DeployInheritInfo info : deployMap.values()) { - if (!info.isRoot()) { - DeployInheritInfo parent = getInfo(info.getParent()); - parent.addChild(info); - } - } - } + private void buildDeployTree() { - private void buildFinalTree() { + for (DeployInheritInfo info : deployMap.values()) { + if (!info.isRoot()) { + DeployInheritInfo parent = getInfo(info.getParent()); + parent.addChild(info); + } + } + } - for (DeployInheritInfo deploy : deployMap.values()) { - if (deploy.isRoot()) { - // build tree top down... - createFinalInfo(null, null, deploy); - } - } - } + private void buildFinalTree() { - private void createFinalInfo(InheritInfo root, InheritInfo parent, DeployInheritInfo deploy) { + for (DeployInheritInfo deploy : deployMap.values()) { + if (deploy.isRoot()) { + // build tree top down... + createFinalInfo(null, null, deploy); + } + } + } - InheritInfo node = new InheritInfo(root, parent, deploy); - if (parent != null) { - parent.addChild(node); - } - finalMap.put(node.getType(), node); + private void createFinalInfo(InheritInfo root, InheritInfo parent, DeployInheritInfo deploy) { - if (root == null) { - root = node; - } + InheritInfo node = new InheritInfo(root, parent, deploy); + if (parent != null) { + parent.addChild(node); + } + finalMap.put(node.getType(), node); - // buildFinalChildren(root, child, deploy); - for (DeployInheritInfo childDeploy : deploy.children()) { - createFinalInfo(root, node, childDeploy); - } - } + if (root == null) { + root = node; + } - /** - * Build the InheritInfo for a given class. - */ - private DeployInheritInfo getInfo(Class cls) { - return deployMap.get(cls); - } + // buildFinalChildren(root, child, deploy); + for (DeployInheritInfo childDeploy : deploy.children()) { + createFinalInfo(root, node, childDeploy); + } + } - private DeployInheritInfo createInfo(Class cls) { + /** + * Build the InheritInfo for a given class. + */ + private DeployInheritInfo getInfo(Class cls) { + return deployMap.get(cls); + } - DeployInheritInfo info = new DeployInheritInfo(cls); + private DeployInheritInfo createInfo(Class cls) { - Class parent = findParent(cls); - if (parent != null) { - info.setParent(parent); - } + DeployInheritInfo info = new DeployInheritInfo(cls); - Inheritance ia = cls.getAnnotation(Inheritance.class); - if (ia != null) { - ia.strategy(); - } - DiscriminatorColumn da = cls.getAnnotation(DiscriminatorColumn.class); - if (da != null) { - // lowercase the discriminator column for RawSql and JSON - info.setDiscriminatorColumn(da.name().toLowerCase()); - DiscriminatorType discriminatorType = da.discriminatorType(); - if (discriminatorType.equals(DiscriminatorType.INTEGER)){ - info.setDiscriminatorType(Types.INTEGER); - } else { - info.setDiscriminatorType(Types.VARCHAR); - } - info.setDiscriminatorLength(da.length()); - } + Class parent = findParent(cls); + if (parent != null) { + info.setParent(parent); + } - DiscriminatorValue dv = cls.getAnnotation(DiscriminatorValue.class); - if (dv != null) { - info.setDiscriminatorValue(dv.value()); - } - - return info; - } + Inheritance ia = cls.getAnnotation(Inheritance.class); + if (ia != null) { + ia.strategy(); + } + DiscriminatorColumn da = cls.getAnnotation(DiscriminatorColumn.class); + if (da != null) { + // lowercase the discriminator column for RawSql and JSON + info.setDiscriminatorColumn(da.name().toLowerCase()); + DiscriminatorType discriminatorType = da.discriminatorType(); + if (discriminatorType.equals(DiscriminatorType.INTEGER)) { + info.setDiscriminatorType(Types.INTEGER); + } else { + info.setDiscriminatorType(Types.VARCHAR); + } + info.setDiscriminatorLength(da.length()); + } - private Class findParent(Class cls) { - Class superCls = cls.getSuperclass(); - if (isInheritanceClass(superCls)) { - return superCls; - } else { - return null; - } - } + DiscriminatorValue dv = cls.getAnnotation(DiscriminatorValue.class); + if (dv != null) { + info.setDiscriminatorValue(dv.value()); + } - private boolean isInheritanceClass(Class cls) { - if (cls.equals(Object.class)) { - return false; - } - Annotation a = cls.getAnnotation(Inheritance.class); - if (a != null) { - return true; - } - // search up the inheritance heirarchy - return isInheritanceClass(cls.getSuperclass()); - } + return info; + } + + private Class findParent(Class cls) { + Class superCls = cls.getSuperclass(); + if (isInheritanceClass(superCls)) { + return superCls; + } else { + return null; + } + } + + private boolean isInheritanceClass(Class cls) { + if (cls.equals(Object.class)) { + return false; + } + Annotation a = cls.getAnnotation(Inheritance.class); + if (a != null) { + return true; + } + // search up the inheritance heirarchy + return isInheritanceClass(cls.getSuperclass()); + } } diff --git a/src/main/java/com/avaje/ebeaninternal/server/deploy/parse/DeployInheritInfo.java b/src/main/java/com/avaje/ebeaninternal/server/deploy/parse/DeployInheritInfo.java index 6cd5cb5e7..fd190a61b 100644 --- a/src/main/java/com/avaje/ebeaninternal/server/deploy/parse/DeployInheritInfo.java +++ b/src/main/java/com/avaje/ebeaninternal/server/deploy/parse/DeployInheritInfo.java @@ -1,257 +1,257 @@ package com.avaje.ebeaninternal.server.deploy.parse; +import com.avaje.ebeaninternal.server.deploy.InheritInfo; + import java.sql.Types; import java.util.ArrayList; import java.util.List; -import com.avaje.ebeaninternal.server.deploy.InheritInfo; - /** * Represents a node in the Inheritance tree. - * Holds information regarding Super Subclass support. + * Holds information regarding Super Subclass support. */ public class DeployInheritInfo { - /** - * the default discriminator column according to the JPA 1.0 spec. - */ - private static final String JPA_DEFAULT_DISCRIM_COLUMN = "dtype"; - - private int discriminatorLength; - - private int discriminatorType; - - private String discriminatorStringValue; - private Object discriminatorObjectValue; - - private String discriminatorColumn; + /** + * the default discriminator column according to the JPA 1.0 spec. + */ + private static final String JPA_DEFAULT_DISCRIM_COLUMN = "dtype"; - private String discriminatorWhere; + private int discriminatorLength; - private final Class type; + private int discriminatorType; - private Class parent; - - private final ArrayList children = new ArrayList(); - - /** - * Create for a given type. - */ - public DeployInheritInfo(Class type){ - this.type = type; - } - - /** - * return the type. - */ - public Class getType() { - return type; - } + private String discriminatorStringValue; + private Object discriminatorObjectValue; - /** - * Return the type of the root object. - */ - public Class getParent() { - return parent; - } + private String discriminatorColumn; - /** - * Set the type of the root object. - */ - public void setParent(Class parent) { - this.parent = parent; - } - - /** - * Return true if this is abstract node. - */ - public boolean isAbstract() { - return (discriminatorObjectValue == null); - } - - /** - * Return true if this is the root node. - */ - public boolean isRoot(){ - return parent == null; - } + private String discriminatorWhere; - /** - * Return the child nodes. - */ - public List children() { - return children; - } - - /** - * Add a child node. - */ - public void addChild(DeployInheritInfo childInfo){ - children.add(childInfo); - } + private final Class type; - /** - * Return the derived where for the discriminator. - */ - public String getDiscriminatorWhere() { - return discriminatorWhere; - } + private Class parent; - /** - * Set the derived where for the discriminator. - */ - public void setDiscriminatorWhere(String discriminatorWhere) { - this.discriminatorWhere = discriminatorWhere; - } + private final ArrayList children = new ArrayList(); - /** - * Return the column name of the discriminator. - */ - public String getDiscriminatorColumn(InheritInfo parent) { - if (discriminatorColumn == null){ - if (parent == null){ - discriminatorColumn = JPA_DEFAULT_DISCRIM_COLUMN; - } else { - discriminatorColumn = parent.getDiscriminatorColumn(); - } - } - return discriminatorColumn; - } + /** + * Create for a given type. + */ + public DeployInheritInfo(Class type) { + this.type = type; + } - /** - * Set the column name of the discriminator. - */ - public void setDiscriminatorColumn(String discriminatorColumn) { - this.discriminatorColumn = discriminatorColumn; - } + /** + * return the type. + */ + public Class getType() { + return type; + } - public int getDiscriminatorLength(InheritInfo parent) { - if (discriminatorLength == 0){ - if (parent == null){ - discriminatorLength = 10; - } else { - discriminatorLength = parent.getDiscriminatorLength(); - } - } - return discriminatorLength; - } - - /** - * Return the sql type of the discriminator value. - */ - public int getDiscriminatorType(InheritInfo parent) { - if (discriminatorType == 0){ - if (parent == null){ - discriminatorType = Types.VARCHAR; - } else { - discriminatorType = parent.getDiscriminatorType(); - } - } - return discriminatorType; - } + /** + * Return the type of the root object. + */ + public Class getParent() { + return parent; + } - /** - * Set the sql type of the discriminator. - */ - public void setDiscriminatorType(int discriminatorType) { - this.discriminatorType = discriminatorType; - } - - /** - * Return the length of the discriminator column. - */ - public int getDiscriminatorLength() { - return discriminatorLength; - } + /** + * Set the type of the root object. + */ + public void setParent(Class parent) { + this.parent = parent; + } - /** - * Set the length of the discriminator column. - */ - public void setDiscriminatorLength(int discriminatorLength) { - this.discriminatorLength = discriminatorLength; - } + /** + * Return true if this is abstract node. + */ + public boolean isAbstract() { + return (discriminatorObjectValue == null); + } - /** - * Return the discriminator value for this node. - */ - public Object getDiscriminatorObjectValue() { - return discriminatorObjectValue; - } + /** + * Return true if this is the root node. + */ + public boolean isRoot() { + return parent == null; + } - public String getDiscriminatorStringValue() { - return discriminatorStringValue; - } + /** + * Return the child nodes. + */ + public List children() { + return children; + } - /** - * Set the discriminator value for this node. - */ - public void setDiscriminatorValue(String value) { - if (value != null){ - value = value.trim(); - if (value.length() != 0) { - discriminatorStringValue = value; - // convert the value if desired - if (discriminatorType == Types.INTEGER){ - this.discriminatorObjectValue = Integer.valueOf(value); - } else { - this.discriminatorObjectValue = value; - } - } - } - } - - public String getWhere() { - - List discList = new ArrayList(); - - appendDiscriminator(discList); + /** + * Add a child node. + */ + public void addChild(DeployInheritInfo childInfo) { + children.add(childInfo); + } - return buildWhereLiteral(discList); - } + /** + * Return the derived where for the discriminator. + */ + public String getDiscriminatorWhere() { + return discriminatorWhere; + } - private void appendDiscriminator(List list) { - if (discriminatorObjectValue != null){ - list.add(discriminatorObjectValue); - } - for (DeployInheritInfo child : children) { - child.appendDiscriminator(list); - } + /** + * Set the derived where for the discriminator. + */ + public void setDiscriminatorWhere(String discriminatorWhere) { + this.discriminatorWhere = discriminatorWhere; + } + + /** + * Return the column name of the discriminator. + */ + public String getDiscriminatorColumn(InheritInfo parent) { + if (discriminatorColumn == null) { + if (parent == null) { + discriminatorColumn = JPA_DEFAULT_DISCRIM_COLUMN; + } else { + discriminatorColumn = parent.getDiscriminatorColumn(); + } } - - private String buildWhereLiteral(List discList) { - int size = discList.size(); - if (size == 0){ - return ""; - } - StringBuilder sb = new StringBuilder(); - sb.append(discriminatorColumn); - if (size == 1){ - sb.append(" = "); - } else { - sb.append(" in ("); - } - for (int i = 0; i < discList.size(); i++) { - appendSqlLiteralValue(i, discList.get(i), sb); - } - if (size > 1){ - sb.append(")"); - } - return sb.toString(); + return discriminatorColumn; + } + + /** + * Set the column name of the discriminator. + */ + public void setDiscriminatorColumn(String discriminatorColumn) { + this.discriminatorColumn = discriminatorColumn; + } + + public int getDiscriminatorLength(InheritInfo parent) { + if (discriminatorLength == 0) { + if (parent == null) { + discriminatorLength = 10; + } else { + discriminatorLength = parent.getDiscriminatorLength(); + } } - - private void appendSqlLiteralValue(int count, Object value, StringBuilder sb) { - if (count > 0){ - sb.append(","); - } - if (value instanceof String){ - sb.append("'").append(value).append("'"); + return discriminatorLength; + } + + /** + * Return the sql type of the discriminator value. + */ + public int getDiscriminatorType(InheritInfo parent) { + if (discriminatorType == 0) { + if (parent == null) { + discriminatorType = Types.VARCHAR; + } else { + discriminatorType = parent.getDiscriminatorType(); + } + } + return discriminatorType; + } + + /** + * Set the sql type of the discriminator. + */ + public void setDiscriminatorType(int discriminatorType) { + this.discriminatorType = discriminatorType; + } + + /** + * Return the length of the discriminator column. + */ + public int getDiscriminatorLength() { + return discriminatorLength; + } + + /** + * Set the length of the discriminator column. + */ + public void setDiscriminatorLength(int discriminatorLength) { + this.discriminatorLength = discriminatorLength; + } + + /** + * Return the discriminator value for this node. + */ + public Object getDiscriminatorObjectValue() { + return discriminatorObjectValue; + } + + public String getDiscriminatorStringValue() { + return discriminatorStringValue; + } + + /** + * Set the discriminator value for this node. + */ + public void setDiscriminatorValue(String value) { + if (value != null) { + value = value.trim(); + if (value.length() != 0) { + discriminatorStringValue = value; + // convert the value if desired + if (discriminatorType == Types.INTEGER) { + this.discriminatorObjectValue = Integer.valueOf(value); } else { - sb.append(value); + this.discriminatorObjectValue = value; } + } } - - public String toString() { - return "InheritInfo[" + type.getName() + "]" + " root[" + parent.getName() + "]" + " disValue[" + discriminatorStringValue + "]"; + } + + public String getWhere() { + + List discList = new ArrayList(); + + appendDiscriminator(discList); + + return buildWhereLiteral(discList); + } + + private void appendDiscriminator(List list) { + if (discriminatorObjectValue != null) { + list.add(discriminatorObjectValue); } - + for (DeployInheritInfo child : children) { + child.appendDiscriminator(list); + } + } + + private String buildWhereLiteral(List discList) { + int size = discList.size(); + if (size == 0) { + return ""; + } + StringBuilder sb = new StringBuilder(); + sb.append(discriminatorColumn); + if (size == 1) { + sb.append(" = "); + } else { + sb.append(" in ("); + } + for (int i = 0; i < discList.size(); i++) { + appendSqlLiteralValue(i, discList.get(i), sb); + } + if (size > 1) { + sb.append(")"); + } + return sb.toString(); + } + + private void appendSqlLiteralValue(int count, Object value, StringBuilder sb) { + if (count > 0) { + sb.append(","); + } + if (value instanceof String) { + sb.append("'").append(value).append("'"); + } else { + sb.append(value); + } + } + + public String toString() { + return "InheritInfo[" + type.getName() + "]" + " root[" + parent.getName() + "]" + " disValue[" + discriminatorStringValue + "]"; + } + }