[hibernate-commits] Hibernate SVN: r18993 - in sandbox/trunk/new-metadata: src/main/java/org/hibernate/metadata and 3 other directories.
hibernate-commits at lists.jboss.org
hibernate-commits at lists.jboss.org
Fri Mar 12 15:31:23 EST 2010
Author: steve.ebersole at jboss.com
Date: 2010-03-12 15:31:19 -0500 (Fri, 12 Mar 2010)
New Revision: 18993
Added:
sandbox/trunk/new-metadata/src/main/java/org/hibernate/metadata/logical/
sandbox/trunk/new-metadata/src/main/java/org/hibernate/metadata/logical/PluralAttributeNature.java
sandbox/trunk/new-metadata/src/main/java/org/hibernate/metadata/schema/AbstractTableSpecification.java
sandbox/trunk/new-metadata/src/main/java/org/hibernate/metadata/schema/SimpleValue.java
sandbox/trunk/new-metadata/src/main/java/org/hibernate/metadata/schema/TableSpecification.java
sandbox/trunk/new-metadata/src/main/java/org/hibernate/metadata/schema/Tuple.java
Removed:
sandbox/trunk/new-metadata/src/main/java/org/hibernate/metadata/java/
Modified:
sandbox/trunk/new-metadata/DESIGN.txt
sandbox/trunk/new-metadata/build.gradle
sandbox/trunk/new-metadata/src/main/java/org/hibernate/metadata/logical/AbstractAttributeContainer.java
sandbox/trunk/new-metadata/src/main/java/org/hibernate/metadata/logical/Attribute.java
sandbox/trunk/new-metadata/src/main/java/org/hibernate/metadata/logical/AttributeContainer.java
sandbox/trunk/new-metadata/src/main/java/org/hibernate/metadata/logical/BasicType.java
sandbox/trunk/new-metadata/src/main/java/org/hibernate/metadata/logical/Component.java
sandbox/trunk/new-metadata/src/main/java/org/hibernate/metadata/logical/Entity.java
sandbox/trunk/new-metadata/src/main/java/org/hibernate/metadata/logical/Hierarchical.java
sandbox/trunk/new-metadata/src/main/java/org/hibernate/metadata/logical/PluralAttribute.java
sandbox/trunk/new-metadata/src/main/java/org/hibernate/metadata/logical/SingularAttribute.java
sandbox/trunk/new-metadata/src/main/java/org/hibernate/metadata/logical/Superclass.java
sandbox/trunk/new-metadata/src/main/java/org/hibernate/metadata/logical/Type.java
sandbox/trunk/new-metadata/src/main/java/org/hibernate/metadata/logical/TypeNature.java
sandbox/trunk/new-metadata/src/main/java/org/hibernate/metadata/mapping/AttributeMapping.java
sandbox/trunk/new-metadata/src/main/java/org/hibernate/metadata/mapping/SingularAssociationAttributeMapping.java
sandbox/trunk/new-metadata/src/main/java/org/hibernate/metadata/mapping/SingularBasicAttributeMapping.java
sandbox/trunk/new-metadata/src/main/java/org/hibernate/metadata/schema/AbstractColumn.java
sandbox/trunk/new-metadata/src/main/java/org/hibernate/metadata/schema/AbstractColumnConstraint.java
sandbox/trunk/new-metadata/src/main/java/org/hibernate/metadata/schema/AbstractValueContainer.java
sandbox/trunk/new-metadata/src/main/java/org/hibernate/metadata/schema/Column.java
sandbox/trunk/new-metadata/src/main/java/org/hibernate/metadata/schema/Constraint.java
sandbox/trunk/new-metadata/src/main/java/org/hibernate/metadata/schema/DerivedValue.java
sandbox/trunk/new-metadata/src/main/java/org/hibernate/metadata/schema/ForeignKey.java
sandbox/trunk/new-metadata/src/main/java/org/hibernate/metadata/schema/Index.java
sandbox/trunk/new-metadata/src/main/java/org/hibernate/metadata/schema/PrimaryKey.java
sandbox/trunk/new-metadata/src/main/java/org/hibernate/metadata/schema/UniqueKey.java
sandbox/trunk/new-metadata/src/main/java/org/hibernate/metadata/schema/Value.java
sandbox/trunk/new-metadata/src/main/java/org/hibernate/metadata/schema/ValueContainer.java
Log:
improvements
Modified: sandbox/trunk/new-metadata/DESIGN.txt
===================================================================
--- sandbox/trunk/new-metadata/DESIGN.txt 2010-03-12 18:24:20 UTC (rev 18992)
+++ sandbox/trunk/new-metadata/DESIGN.txt 2010-03-12 20:31:19 UTC (rev 18993)
@@ -1,19 +1,3 @@
-This file is intended as a list of the design goals for this work. What are we trying to achieve? why? And
-how are we planning on going about it.
+Discussion moved to wiki:
-Mainly this is to be a refactoring of the existing org.hibernate.mapping package. There are two main problems with
-the current code:
-1) It represents a single unified view of the logical model which is neither the java mode nor the
-database model; it is somewhere in between. Yet it does this in a singular manner.
-2) Lack of encapsulation
-
-To attempt to alleviate these problems, the proposal is a separation such that we have:
-1) Metadata about the database schema, in org.hibernate.metadata.schema package
-2) Metadata about the Java model, in the org.hibernate.metadata.java package. todo : what about other entitymodes?
-3) Metadata about the mapping between the two above, in the org.hibernate.metadata.mapping package
-
-Especially trying to keep them as independent as possible. Especially, the
-org.hibernate.metadata.schema and org.hibernate.metadata.java package should
-be independent onto themselves, with the org.hibernate.metadata.mapping package
-providing the linkage/binding
-
+http://community.jboss.org/docs/DOC-14928
\ No newline at end of file
Modified: sandbox/trunk/new-metadata/build.gradle
===================================================================
--- sandbox/trunk/new-metadata/build.gradle 2010-03-12 18:24:20 UTC (rev 18992)
+++ sandbox/trunk/new-metadata/build.gradle 2010-03-12 20:31:19 UTC (rev 18993)
@@ -36,5 +36,5 @@
)
}
-targetCompatibility = "1.4"
-sourceCompatibility = "1.4"
+targetCompatibility = "1.5"
+sourceCompatibility = "1.5"
Copied: sandbox/trunk/new-metadata/src/main/java/org/hibernate/metadata/logical (from rev 18991, sandbox/trunk/new-metadata/src/main/java/org/hibernate/metadata/java)
Modified: sandbox/trunk/new-metadata/src/main/java/org/hibernate/metadata/logical/AbstractAttributeContainer.java
===================================================================
--- sandbox/trunk/new-metadata/src/main/java/org/hibernate/metadata/java/AbstractAttributeContainer.java 2010-03-12 00:11:45 UTC (rev 18991)
+++ sandbox/trunk/new-metadata/src/main/java/org/hibernate/metadata/logical/AbstractAttributeContainer.java 2010-03-12 20:31:19 UTC (rev 18993)
@@ -21,7 +21,7 @@
* 51 Franklin Street, Fifth Floor
* Boston, MA 02110-1301 USA
*/
-package org.hibernate.metadata.java;
+package org.hibernate.metadata.logical;
import java.util.Collections;
import java.util.HashMap;
@@ -29,29 +29,40 @@
import java.util.Set;
/**
- * TODO : javadoc
+ * Convenient base class for {@link AttributeContainer}. Because in our model all
+ * {@link AttributeContainer AttributeContainers} are also {@link Hierarchical} we also implement that here
+ * as well.
*
* @author Steve Ebersole
*/
-public abstract class AbstractAttributeContainer implements AttributeContainer {
- private final Class javaType;
- private LinkedHashSet attributeSet = new LinkedHashSet();
- private HashMap attributeMap = new HashMap();
+public abstract class AbstractAttributeContainer implements AttributeContainer, Hierarchical {
+ private final String name;
+ private final Hierarchical superType;
+ private LinkedHashSet<Attribute> attributeSet = new LinkedHashSet<Attribute>();
+ private HashMap<String,Attribute> attributeMap = new HashMap<String,Attribute>();
- protected AbstractAttributeContainer(Class javaType) {
- this.javaType = javaType;
+ public AbstractAttributeContainer(String name, Hierarchical superType) {
+ this.name = name;
+ this.superType = superType;
}
/**
* {@inheritDoc}
*/
- public Class getJavaType() {
- return javaType;
+ public String getName() {
+ return name;
}
/**
* {@inheritDoc}
*/
+ public Hierarchical getSuperType() {
+ return superType;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
public Set getAttributes() {
return Collections.unmodifiableSet( attributeSet );
}
@@ -60,7 +71,7 @@
* {@inheritDoc}
*/
public Attribute getAttribute(String name) {
- return (Attribute) attributeMap.get( name );
+ return attributeMap.get( name );
}
public void addAttribute(Attribute attribute) {
Modified: sandbox/trunk/new-metadata/src/main/java/org/hibernate/metadata/logical/Attribute.java
===================================================================
--- sandbox/trunk/new-metadata/src/main/java/org/hibernate/metadata/java/Attribute.java 2010-03-12 00:11:45 UTC (rev 18991)
+++ sandbox/trunk/new-metadata/src/main/java/org/hibernate/metadata/logical/Attribute.java 2010-03-12 20:31:19 UTC (rev 18993)
@@ -21,11 +21,8 @@
* 51 Franklin Street, Fifth Floor
* Boston, MA 02110-1301 USA
*/
-package org.hibernate.metadata.java;
+package org.hibernate.metadata.logical;
-import java.lang.reflect.Field;
-import java.lang.reflect.Method;
-
/**
* Most basic contract of an attribute
*
@@ -50,13 +47,7 @@
* Is this attribute singular (i.e. castable to {@link SingularAttribute})? The other alternative
* is {@link PluralAttribute}).
*
- * @return True if the castable to {@link SingularAttribute}; false if castable to {@link PluralAttribute}).
+ * @return True if castable to {@link SingularAttribute}; false if castable to {@link PluralAttribute}).
*/
public boolean isSingular();
-
- public Field getField();
-
- public Method getGetterMethod();
-
- public Method getSetterMethod();
}
Modified: sandbox/trunk/new-metadata/src/main/java/org/hibernate/metadata/logical/AttributeContainer.java
===================================================================
--- sandbox/trunk/new-metadata/src/main/java/org/hibernate/metadata/java/AttributeContainer.java 2010-03-12 00:11:45 UTC (rev 18991)
+++ sandbox/trunk/new-metadata/src/main/java/org/hibernate/metadata/logical/AttributeContainer.java 2010-03-12 20:31:19 UTC (rev 18993)
@@ -21,7 +21,7 @@
* 51 Franklin Street, Fifth Floor
* Boston, MA 02110-1301 USA
*/
-package org.hibernate.metadata.java;
+package org.hibernate.metadata.logical;
import java.util.Set;
Modified: sandbox/trunk/new-metadata/src/main/java/org/hibernate/metadata/logical/BasicType.java
===================================================================
--- sandbox/trunk/new-metadata/src/main/java/org/hibernate/metadata/java/BasicType.java 2010-03-12 00:11:45 UTC (rev 18991)
+++ sandbox/trunk/new-metadata/src/main/java/org/hibernate/metadata/logical/BasicType.java 2010-03-12 20:31:19 UTC (rev 18993)
@@ -21,7 +21,7 @@
* 51 Franklin Street, Fifth Floor
* Boston, MA 02110-1301 USA
*/
-package org.hibernate.metadata.java;
+package org.hibernate.metadata.logical;
/**
* TODO : javadoc
@@ -29,17 +29,23 @@
* @author Steve Ebersole
*/
public class BasicType implements Type {
- private final Class javaType;
+ private final String name;
- public BasicType(Class javaType) {
- this.javaType = javaType;
+ public BasicType(String name) {
+ this.name = name;
}
+ /**
+ * {@inheritDoc}
+ */
+ public String getName() {
+ return name;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
public TypeNature getNature() {
return TypeNature.BASIC;
}
-
- public Class getJavaType() {
- return javaType;
- }
}
Modified: sandbox/trunk/new-metadata/src/main/java/org/hibernate/metadata/logical/Component.java
===================================================================
--- sandbox/trunk/new-metadata/src/main/java/org/hibernate/metadata/java/Component.java 2010-03-12 00:11:45 UTC (rev 18991)
+++ sandbox/trunk/new-metadata/src/main/java/org/hibernate/metadata/logical/Component.java 2010-03-12 20:31:19 UTC (rev 18993)
@@ -21,7 +21,7 @@
* 51 Franklin Street, Fifth Floor
* Boston, MA 02110-1301 USA
*/
-package org.hibernate.metadata.java;
+package org.hibernate.metadata.logical;
/**
* TODO : javadoc
@@ -31,17 +31,13 @@
* @author Steve Ebersole
*/
public class Component extends AbstractAttributeContainer implements Hierarchical {
- private final Hierarchical superType;
-
- public Component(Class javaType, Hierarchical superType) {
- super( javaType );
- this.superType = superType;
+ public Component(String name, Hierarchical superType) {
+ super( name, superType );
}
- public Hierarchical getSuperTye() {
- return superType;
- }
-
+ /**
+ * {@inheritDoc}
+ */
public TypeNature getNature() {
return TypeNature.COMPONENT;
}
Modified: sandbox/trunk/new-metadata/src/main/java/org/hibernate/metadata/logical/Entity.java
===================================================================
--- sandbox/trunk/new-metadata/src/main/java/org/hibernate/metadata/java/Entity.java 2010-03-12 00:11:45 UTC (rev 18991)
+++ sandbox/trunk/new-metadata/src/main/java/org/hibernate/metadata/logical/Entity.java 2010-03-12 20:31:19 UTC (rev 18993)
@@ -21,25 +21,21 @@
* 51 Franklin Street, Fifth Floor
* Boston, MA 02110-1301 USA
*/
-package org.hibernate.metadata.java;
+package org.hibernate.metadata.logical;
/**
* TODO : javadoc
*
* @author Steve Ebersole
*/
-public class Entity extends AbstractAttributeContainer implements Hierarchical {
- private final Hierarchical superType;
-
- public Entity(Class javaType, Hierarchical superType) {
- super( javaType );
- this.superType = superType;
+public class Entity extends AbstractAttributeContainer {
+ public Entity(String name, Hierarchical superType) {
+ super( name, superType );
}
- public Hierarchical getSuperTye() {
- return superType;
- }
-
+ /**
+ * {@inheritDoc}
+ */
public TypeNature getNature() {
return TypeNature.ENTITY;
}
Modified: sandbox/trunk/new-metadata/src/main/java/org/hibernate/metadata/logical/Hierarchical.java
===================================================================
--- sandbox/trunk/new-metadata/src/main/java/org/hibernate/metadata/java/Hierarchical.java 2010-03-12 00:11:45 UTC (rev 18991)
+++ sandbox/trunk/new-metadata/src/main/java/org/hibernate/metadata/logical/Hierarchical.java 2010-03-12 20:31:19 UTC (rev 18993)
@@ -21,13 +21,18 @@
* 51 Franklin Street, Fifth Floor
* Boston, MA 02110-1301 USA
*/
-package org.hibernate.metadata.java;
+package org.hibernate.metadata.logical;
/**
- * TODO : javadoc
+ * Additional contract for things that can occur in an inheritance hierarchy (specifically ones we would
+ * need to traverse).
*
* @author Steve Ebersole
*/
public interface Hierarchical extends AttributeContainer {
- public Hierarchical getSuperTye();
+ /**
+ * Get the
+ * @return
+ */
+ public Hierarchical getSuperType();
}
Modified: sandbox/trunk/new-metadata/src/main/java/org/hibernate/metadata/logical/PluralAttribute.java
===================================================================
--- sandbox/trunk/new-metadata/src/main/java/org/hibernate/metadata/java/PluralAttribute.java 2010-03-12 00:11:45 UTC (rev 18991)
+++ sandbox/trunk/new-metadata/src/main/java/org/hibernate/metadata/logical/PluralAttribute.java 2010-03-12 20:31:19 UTC (rev 18993)
@@ -21,14 +21,32 @@
* 51 Franklin Street, Fifth Floor
* Boston, MA 02110-1301 USA
*/
-package org.hibernate.metadata.java;
+package org.hibernate.metadata.logical;
/**
- * TODO : javadoc
+ * A plural valued attribute
*
* @author Steve Ebersole
*/
-public interface PluralAttribute {
- public Class getCollectionJavaType();
- public Class getCollectionElementType();
+public interface PluralAttribute extends Attribute {
+ /**
+ * Retrieve the collection type descriptor.
+ *
+ * @return The collectionType
+ */
+ public PluralAttributeNature getPluralAttributeNature();
+
+ /**
+ * Retrieve the descriptor for the type of collection elements.
+ *
+ * @return The type descriptor for the collection elements
+ */
+ public Type getElementType();
+
+ /**
+ * Retrieve the descriptor for the type of collection index, provided this is an indexed collection (map or list).
+ *
+ * @return The type descriptor for the collection index, or null if not an indexed collection.
+ */
+ public Type getIndexType();
}
Added: sandbox/trunk/new-metadata/src/main/java/org/hibernate/metadata/logical/PluralAttributeNature.java
===================================================================
--- sandbox/trunk/new-metadata/src/main/java/org/hibernate/metadata/logical/PluralAttributeNature.java (rev 0)
+++ sandbox/trunk/new-metadata/src/main/java/org/hibernate/metadata/logical/PluralAttributeNature.java 2010-03-12 20:31:19 UTC (rev 18993)
@@ -0,0 +1,34 @@
+package org.hibernate.metadata.logical;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * TODO : javadoc
+ *
+ * @author Steve Ebersole
+ */
+public enum PluralAttributeNature {
+ COLLECTION( "collection", Collection.class ),
+ SET( "set", Set.class ),
+ LIST( "list", List.class ),
+ MAP( "map", Map.class );
+
+ private final String name;
+ private final Class javaContract;
+
+ PluralAttributeNature(String name, Class javaContract) {
+ this.name = name;
+ this.javaContract = javaContract;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public Class getJavaContract() {
+ return javaContract;
+ }
+}
Modified: sandbox/trunk/new-metadata/src/main/java/org/hibernate/metadata/logical/SingularAttribute.java
===================================================================
--- sandbox/trunk/new-metadata/src/main/java/org/hibernate/metadata/java/SingularAttribute.java 2010-03-12 00:11:45 UTC (rev 18991)
+++ sandbox/trunk/new-metadata/src/main/java/org/hibernate/metadata/logical/SingularAttribute.java 2010-03-12 20:31:19 UTC (rev 18993)
@@ -21,7 +21,7 @@
* 51 Franklin Street, Fifth Floor
* Boston, MA 02110-1301 USA
*/
-package org.hibernate.metadata.java;
+package org.hibernate.metadata.logical;
/**
* A single valued (non-collection) attribute
@@ -29,5 +29,10 @@
* @author Steve Ebersole
*/
public interface SingularAttribute extends Attribute {
+ /**
+ * Retrieve the attribute type descriptor.
+ *
+ * @return THe attribute type.
+ */
public Type getSingularAttributeType();
}
Modified: sandbox/trunk/new-metadata/src/main/java/org/hibernate/metadata/logical/Superclass.java
===================================================================
--- sandbox/trunk/new-metadata/src/main/java/org/hibernate/metadata/java/Superclass.java 2010-03-12 00:11:45 UTC (rev 18991)
+++ sandbox/trunk/new-metadata/src/main/java/org/hibernate/metadata/logical/Superclass.java 2010-03-12 20:31:19 UTC (rev 18993)
@@ -21,7 +21,7 @@
* 51 Franklin Street, Fifth Floor
* Boston, MA 02110-1301 USA
*/
-package org.hibernate.metadata.java;
+package org.hibernate.metadata.logical;
/**
* TODO : javadoc
@@ -29,17 +29,13 @@
* @author Steve Ebersole
*/
public class Superclass extends AbstractAttributeContainer implements Hierarchical {
- private final Hierarchical superType;
-
- public Superclass(Class javaType, Hierarchical superType) {
- super( javaType );
- this.superType = superType;
+ public Superclass(String name, Hierarchical superType) {
+ super( name, superType );
}
- public Hierarchical getSuperTye() {
- return superType;
- }
-
+ /**
+ * {@inheritDoc}
+ */
public TypeNature getNature() {
return TypeNature.SUPERCLASS;
}
Modified: sandbox/trunk/new-metadata/src/main/java/org/hibernate/metadata/logical/Type.java
===================================================================
--- sandbox/trunk/new-metadata/src/main/java/org/hibernate/metadata/java/Type.java 2010-03-12 00:11:45 UTC (rev 18991)
+++ sandbox/trunk/new-metadata/src/main/java/org/hibernate/metadata/logical/Type.java 2010-03-12 20:31:19 UTC (rev 18993)
@@ -21,7 +21,7 @@
* 51 Franklin Street, Fifth Floor
* Boston, MA 02110-1301 USA
*/
-package org.hibernate.metadata.java;
+package org.hibernate.metadata.logical;
/**
* Basic information about a Java type, in regards to its role in particular set of mappings.
@@ -30,16 +30,17 @@
*/
public interface Type {
/**
+ * Get the name of the type.
+ *
+ * @return The name
+ */
+ public String getName();
+
+ /**
* Return the persistence type.
*
* @return persistence type
*/
public TypeNature getNature();
- /**
- * Return the represented Java type.
- *
- * @return Java type
- */
- public Class getJavaType();
}
Modified: sandbox/trunk/new-metadata/src/main/java/org/hibernate/metadata/logical/TypeNature.java
===================================================================
--- sandbox/trunk/new-metadata/src/main/java/org/hibernate/metadata/java/TypeNature.java 2010-03-12 00:11:45 UTC (rev 18991)
+++ sandbox/trunk/new-metadata/src/main/java/org/hibernate/metadata/logical/TypeNature.java 2010-03-12 20:31:19 UTC (rev 18993)
@@ -21,30 +21,21 @@
* 51 Franklin Street, Fifth Floor
* Boston, MA 02110-1301 USA
*/
-package org.hibernate.metadata.java;
+package org.hibernate.metadata.logical;
import java.io.Serializable;
-import java.util.HashMap;
/**
* Describes the nature of a type.
*
* @author Steve Ebersole
*/
-public class TypeNature implements Serializable {
- public static final TypeNature BASIC = new TypeNature( "BASIC" );
- public static final TypeNature COMPONENT = new TypeNature( "COMPONENT" );
- public static final TypeNature ENTITY = new TypeNature( "ENTITY" );
- public static final TypeNature SUPERCLASS = new TypeNature( "SUPERCLASS" );
+public enum TypeNature implements Serializable {
+ BASIC( "basic" ),
+ COMPONENT( "component" ),
+ ENTITY( "entity" ),
+ SUPERCLASS( "superclass" );
- private static final HashMap INSTANCES = new HashMap();
- static {
- INSTANCES.put( BASIC.name, BASIC );
- INSTANCES.put( COMPONENT.name, COMPONENT );
- INSTANCES.put( ENTITY.name, ENTITY );
- INSTANCES.put( SUPERCLASS.name, SUPERCLASS );
- }
-
private final String name;
private TypeNature(String name) {
@@ -58,8 +49,4 @@
public String toString() {
return super.toString() + "[" + getName() + "]";
}
-
- private Object readResolve() {
- return INSTANCES.get( name );
- }
}
Modified: sandbox/trunk/new-metadata/src/main/java/org/hibernate/metadata/mapping/AttributeMapping.java
===================================================================
--- sandbox/trunk/new-metadata/src/main/java/org/hibernate/metadata/mapping/AttributeMapping.java 2010-03-12 18:24:20 UTC (rev 18992)
+++ sandbox/trunk/new-metadata/src/main/java/org/hibernate/metadata/mapping/AttributeMapping.java 2010-03-12 20:31:19 UTC (rev 18993)
@@ -23,7 +23,7 @@
*/
package org.hibernate.metadata.mapping;
-import org.hibernate.metadata.java.Attribute;
+import org.hibernate.metadata.logical.Attribute;
import org.hibernate.metadata.schema.Value;
/**
Modified: sandbox/trunk/new-metadata/src/main/java/org/hibernate/metadata/mapping/SingularAssociationAttributeMapping.java
===================================================================
--- sandbox/trunk/new-metadata/src/main/java/org/hibernate/metadata/mapping/SingularAssociationAttributeMapping.java 2010-03-12 18:24:20 UTC (rev 18992)
+++ sandbox/trunk/new-metadata/src/main/java/org/hibernate/metadata/mapping/SingularAssociationAttributeMapping.java 2010-03-12 20:31:19 UTC (rev 18993)
@@ -23,8 +23,8 @@
*/
package org.hibernate.metadata.mapping;
-import org.hibernate.metadata.java.Attribute;
-import org.hibernate.metadata.java.SingularAttribute;
+import org.hibernate.metadata.logical.Attribute;
+import org.hibernate.metadata.logical.SingularAttribute;
import org.hibernate.metadata.schema.ForeignKey;
import org.hibernate.metadata.schema.Value;
Modified: sandbox/trunk/new-metadata/src/main/java/org/hibernate/metadata/mapping/SingularBasicAttributeMapping.java
===================================================================
--- sandbox/trunk/new-metadata/src/main/java/org/hibernate/metadata/mapping/SingularBasicAttributeMapping.java 2010-03-12 18:24:20 UTC (rev 18992)
+++ sandbox/trunk/new-metadata/src/main/java/org/hibernate/metadata/mapping/SingularBasicAttributeMapping.java 2010-03-12 20:31:19 UTC (rev 18993)
@@ -23,8 +23,8 @@
*/
package org.hibernate.metadata.mapping;
-import org.hibernate.metadata.java.Attribute;
-import org.hibernate.metadata.java.SingularAttribute;
+import org.hibernate.metadata.logical.Attribute;
+import org.hibernate.metadata.logical.SingularAttribute;
import org.hibernate.metadata.schema.Value;
/**
Modified: sandbox/trunk/new-metadata/src/main/java/org/hibernate/metadata/schema/AbstractColumn.java
===================================================================
--- sandbox/trunk/new-metadata/src/main/java/org/hibernate/metadata/schema/AbstractColumn.java 2010-03-12 18:24:20 UTC (rev 18992)
+++ sandbox/trunk/new-metadata/src/main/java/org/hibernate/metadata/schema/AbstractColumn.java 2010-03-12 20:31:19 UTC (rev 18993)
@@ -31,7 +31,7 @@
*
* @author Steve Ebersole
*/
-public abstract class AbstractColumn implements Value {
+public abstract class AbstractColumn implements SimpleValue {
private static final Logger log = LoggerFactory.getLogger( AbstractColumn.class );
private final ValueContainer table;
@@ -44,7 +44,7 @@
/**
* {@inheritDoc}
*/
- public ValueContainer getTable() {
+ public ValueContainer getValueContainer() {
return table;
}
Modified: sandbox/trunk/new-metadata/src/main/java/org/hibernate/metadata/schema/AbstractColumnConstraint.java
===================================================================
--- sandbox/trunk/new-metadata/src/main/java/org/hibernate/metadata/schema/AbstractColumnConstraint.java 2010-03-12 18:24:20 UTC (rev 18992)
+++ sandbox/trunk/new-metadata/src/main/java/org/hibernate/metadata/schema/AbstractColumnConstraint.java 2010-03-12 20:31:19 UTC (rev 18993)
@@ -34,16 +34,16 @@
* @author Steve Ebersole
*/
public abstract class AbstractColumnConstraint implements Constraint {
- private final ValueContainer table;
+ private final TableSpecification table;
private final String name;
- private List/*<Value>*/ columns = new ArrayList();
+ private List<Column> columns = new ArrayList<Column>();
- protected AbstractColumnConstraint(ValueContainer table, String name) {
+ protected AbstractColumnConstraint(TableSpecification table, String name) {
this.table = table;
this.name = name;
}
- public ValueContainer getTable() {
+ public TableSpecification getTable() {
return table;
}
@@ -51,12 +51,12 @@
return name;
}
- public List/*<Value>*/ getColumns() {
+ public List<Column> getColumns() {
return columns;
}
- public void addColumn(Value column) {
- if ( column.getTable() != getTable() ) {
+ public void addColumn(Column column) {
+ if ( column.getValueContainer() != getTable() ) {
throw new IllegalArgumentException( "Unable to add column to constraint; tables did not match" );
}
columns.add( column );
Added: sandbox/trunk/new-metadata/src/main/java/org/hibernate/metadata/schema/AbstractTableSpecification.java
===================================================================
--- sandbox/trunk/new-metadata/src/main/java/org/hibernate/metadata/schema/AbstractTableSpecification.java (rev 0)
+++ sandbox/trunk/new-metadata/src/main/java/org/hibernate/metadata/schema/AbstractTableSpecification.java 2010-03-12 20:31:19 UTC (rev 18993)
@@ -0,0 +1,41 @@
+/*
+ * Hibernate, Relational Persistence for Idiomatic Java
+ *
+ * Copyright (c) 2010, Red Hat Inc. or third-party contributors as
+ * indicated by the @author tags or express copyright attribution
+ * statements applied by the authors. All third-party contributions are
+ * distributed under license by Red Hat Inc.
+ *
+ * This copyrighted material is made available to anyone wishing to use, modify,
+ * copy, or redistribute it subject to the terms and conditions of the GNU
+ * Lesser General Public License, as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
+ * for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this distribution; if not, write to:
+ * Free Software Foundation, Inc.
+ * 51 Franklin Street, Fifth Floor
+ * Boston, MA 02110-1301 USA
+ */
+package org.hibernate.metadata.schema;
+
+/**
+ * Convenience base class for implementing the {@link ValueContainer} contract centralizing commonality
+ * between modelling tables views and inline views.
+ *
+ * @author Steve Ebersole
+ */
+public abstract class AbstractTableSpecification extends AbstractValueContainer implements TableSpecification {
+ private PrimaryKey primaryKey = new PrimaryKey( this );
+
+ /**
+ * {@inheritDoc}
+ */
+ public PrimaryKey getPrimaryKey() {
+ return primaryKey;
+ }
+}
Modified: sandbox/trunk/new-metadata/src/main/java/org/hibernate/metadata/schema/AbstractValueContainer.java
===================================================================
--- sandbox/trunk/new-metadata/src/main/java/org/hibernate/metadata/schema/AbstractValueContainer.java 2010-03-12 18:24:20 UTC (rev 18992)
+++ sandbox/trunk/new-metadata/src/main/java/org/hibernate/metadata/schema/AbstractValueContainer.java 2010-03-12 20:31:19 UTC (rev 18993)
@@ -32,7 +32,6 @@
* @author Steve Ebersole
*/
public abstract class AbstractValueContainer implements ValueContainer {
- private PrimaryKey primaryKey = new PrimaryKey( this );
private final LinkedHashSet values = new LinkedHashSet();
/**
@@ -49,10 +48,15 @@
return values.iterator();
}
- /**
- * {@inheritDoc}
- */
- public PrimaryKey getPrimaryKey() {
- return primaryKey;
+ public Column createColumn(String name) {
+ return new Column( this, name );
}
+
+ public DerivedValue createDerivedValue(String fragment) {
+ return new DerivedValue( this );
+ }
+
+ public Tuple createTuple(String name) {
+ return new Tuple( this, name );
+ }
}
Modified: sandbox/trunk/new-metadata/src/main/java/org/hibernate/metadata/schema/Column.java
===================================================================
--- sandbox/trunk/new-metadata/src/main/java/org/hibernate/metadata/schema/Column.java 2010-03-12 18:24:20 UTC (rev 18992)
+++ sandbox/trunk/new-metadata/src/main/java/org/hibernate/metadata/schema/Column.java 2010-03-12 20:31:19 UTC (rev 18993)
@@ -44,6 +44,6 @@
* {@inheritDoc}
*/
public String toDebugString() {
- return getTable().toDebugString() + '.' + getName();
+ return getValueContainer().toDebugString() + '.' + getName();
}
}
Modified: sandbox/trunk/new-metadata/src/main/java/org/hibernate/metadata/schema/Constraint.java
===================================================================
--- sandbox/trunk/new-metadata/src/main/java/org/hibernate/metadata/schema/Constraint.java 2010-03-12 18:24:20 UTC (rev 18992)
+++ sandbox/trunk/new-metadata/src/main/java/org/hibernate/metadata/schema/Constraint.java 2010-03-12 20:31:19 UTC (rev 18993)
@@ -35,8 +35,8 @@
* @author Steve Ebersole
*/
public interface Constraint {
- public ValueContainer getTable();
+ public TableSpecification getTable();
public String getName();
- public List/*<Value>*/ getColumns();
+ public List<Column> getColumns();
}
Modified: sandbox/trunk/new-metadata/src/main/java/org/hibernate/metadata/schema/DerivedValue.java
===================================================================
--- sandbox/trunk/new-metadata/src/main/java/org/hibernate/metadata/schema/DerivedValue.java 2010-03-12 18:24:20 UTC (rev 18992)
+++ sandbox/trunk/new-metadata/src/main/java/org/hibernate/metadata/schema/DerivedValue.java 2010-03-12 20:31:19 UTC (rev 18993)
@@ -37,6 +37,6 @@
* {@inheritDoc}
*/
public String toDebugString() {
- return getTable().toDebugString() + ".{derived-column}";
+ return getValueContainer().toDebugString() + ".{derived-column}";
}
}
Modified: sandbox/trunk/new-metadata/src/main/java/org/hibernate/metadata/schema/ForeignKey.java
===================================================================
--- sandbox/trunk/new-metadata/src/main/java/org/hibernate/metadata/schema/ForeignKey.java 2010-03-12 18:24:20 UTC (rev 18992)
+++ sandbox/trunk/new-metadata/src/main/java/org/hibernate/metadata/schema/ForeignKey.java 2010-03-12 20:31:19 UTC (rev 18993)
@@ -37,20 +37,20 @@
public class ForeignKey implements Constraint {
private static final Logger log = LoggerFactory.getLogger( ForeignKey.class );
- private final ValueContainer sourceTable;
- private final ValueContainer targetTable;
+ private final TableSpecification sourceTable;
+ private final TableSpecification targetTable;
private final String name;
- private List/*<Value>*/ sourceColumns = new ArrayList();
- private List/*<Value>*/ targetColumns;
+ private List<Column> sourceColumns = new ArrayList();
+ private List<Column> targetColumns;
- public ForeignKey(ValueContainer sourceTable, ValueContainer targetTable, String name) {
+ public ForeignKey(TableSpecification sourceTable, TableSpecification targetTable, String name) {
this.sourceTable = sourceTable;
this.targetTable = targetTable;
this.name = name;
}
- public ForeignKey(ValueContainer sourceTable, ValueContainer targetTable) {
+ public ForeignKey(TableSpecification sourceTable, TableSpecification targetTable) {
this( sourceTable, targetTable, null );
}
@@ -58,33 +58,33 @@
return name;
}
- public ValueContainer getTable() {
+ public TableSpecification getTable() {
return getSourceTable();
}
- public ValueContainer getSourceTable() {
+ public TableSpecification getSourceTable() {
return sourceTable;
}
- public ValueContainer getTargetTable() {
+ public TableSpecification getTargetTable() {
return targetTable;
}
- public List/*<Value>*/ getColumns() {
+ public List<Column> getColumns() {
return getSourceColumns();
}
- public List getSourceColumns() {
+ public List<Column> getSourceColumns() {
return sourceColumns;
}
- public List getTargetColumns() {
+ public List<Column> getTargetColumns() {
return targetColumns == null
? getTargetTable().getPrimaryKey().getColumns()
: targetColumns;
}
- public void addColumnMapping(Value sourceColumn, Value targetColumn) {
+ public void addColumnMapping(Column sourceColumn, Column targetColumn) {
if ( targetColumn == null ) {
if ( targetColumns != null ) {
if ( log.isWarnEnabled() ) {
Modified: sandbox/trunk/new-metadata/src/main/java/org/hibernate/metadata/schema/Index.java
===================================================================
--- sandbox/trunk/new-metadata/src/main/java/org/hibernate/metadata/schema/Index.java 2010-03-12 18:24:20 UTC (rev 18992)
+++ sandbox/trunk/new-metadata/src/main/java/org/hibernate/metadata/schema/Index.java 2010-03-12 20:31:19 UTC (rev 18993)
@@ -29,7 +29,7 @@
* @author Steve Ebersole
*/
public class Index extends AbstractColumnConstraint implements Constraint {
- protected Index(ValueContainer table, String name) {
+ protected Index(TableSpecification table, String name) {
super( table, name );
}
}
Modified: sandbox/trunk/new-metadata/src/main/java/org/hibernate/metadata/schema/PrimaryKey.java
===================================================================
--- sandbox/trunk/new-metadata/src/main/java/org/hibernate/metadata/schema/PrimaryKey.java 2010-03-12 18:24:20 UTC (rev 18992)
+++ sandbox/trunk/new-metadata/src/main/java/org/hibernate/metadata/schema/PrimaryKey.java 2010-03-12 20:31:19 UTC (rev 18993)
@@ -39,7 +39,7 @@
// later in terms of building the metamodel
private String name;
- public PrimaryKey(ValueContainer table) {
+ public PrimaryKey(TableSpecification table) {
super( table, null );
}
Added: sandbox/trunk/new-metadata/src/main/java/org/hibernate/metadata/schema/SimpleValue.java
===================================================================
--- sandbox/trunk/new-metadata/src/main/java/org/hibernate/metadata/schema/SimpleValue.java (rev 0)
+++ sandbox/trunk/new-metadata/src/main/java/org/hibernate/metadata/schema/SimpleValue.java 2010-03-12 20:31:19 UTC (rev 18993)
@@ -0,0 +1,45 @@
+/*
+ * Hibernate, Relational Persistence for Idiomatic Java
+ *
+ * Copyright (c) 2010, Red Hat Inc. or third-party contributors as
+ * indicated by the @author tags or express copyright attribution
+ * statements applied by the authors. All third-party contributions are
+ * distributed under license by Red Hat Inc.
+ *
+ * This copyrighted material is made available to anyone wishing to use, modify,
+ * copy, or redistribute it subject to the terms and conditions of the GNU
+ * Lesser General Public License, as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
+ * for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this distribution; if not, write to:
+ * Free Software Foundation, Inc.
+ * 51 Franklin Street, Fifth Floor
+ * Boston, MA 02110-1301 USA
+ */
+package org.hibernate.metadata.schema;
+
+/**
+ * TODO : javadoc
+ *
+ * @author Steve Ebersole
+ */
+public interface SimpleValue extends Value {
+ /**
+ * Retrieve the datatype of this value.
+ *
+ * @return The value's datatype
+ */
+ public Datatype getDatatype();
+
+ /**
+ * Set the datatype of this value.
+ *
+ * @param datatype
+ */
+ public void setDatatype(Datatype datatype);
+}
Added: sandbox/trunk/new-metadata/src/main/java/org/hibernate/metadata/schema/TableSpecification.java
===================================================================
--- sandbox/trunk/new-metadata/src/main/java/org/hibernate/metadata/schema/TableSpecification.java (rev 0)
+++ sandbox/trunk/new-metadata/src/main/java/org/hibernate/metadata/schema/TableSpecification.java 2010-03-12 20:31:19 UTC (rev 18993)
@@ -0,0 +1,47 @@
+/*
+ * Hibernate, Relational Persistence for Idiomatic Java
+ *
+ * Copyright (c) 2010, Red Hat Inc. or third-party contributors as
+ * indicated by the @author tags or express copyright attribution
+ * statements applied by the authors. All third-party contributions are
+ * distributed under license by Red Hat Inc.
+ *
+ * This copyrighted material is made available to anyone wishing to use, modify,
+ * copy, or redistribute it subject to the terms and conditions of the GNU
+ * Lesser General Public License, as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
+ * for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this distribution; if not, write to:
+ * Free Software Foundation, Inc.
+ * 51 Franklin Street, Fifth Floor
+ * Boston, MA 02110-1301 USA
+ */
+package org.hibernate.metadata.schema;
+
+import java.util.Set;
+
+/**
+ * Models what ANSI SQL terms a table specification which is a table or a view or an inline view.
+ *
+ * @author Steve Ebersole
+ */
+public interface TableSpecification extends ValueContainer {
+ /**
+ * Get the primary key definition for this table spec.
+ *
+ * @return The PK definition.
+ */
+ public PrimaryKey getPrimaryKey();
+
+ /**
+ * Get the physical table names modelled here. THis is especially important in the case of an inline view.
+ *
+ * @return The spaces.
+ */
+ public Set getSpaces();
+}
Added: sandbox/trunk/new-metadata/src/main/java/org/hibernate/metadata/schema/Tuple.java
===================================================================
--- sandbox/trunk/new-metadata/src/main/java/org/hibernate/metadata/schema/Tuple.java (rev 0)
+++ sandbox/trunk/new-metadata/src/main/java/org/hibernate/metadata/schema/Tuple.java 2010-03-12 20:31:19 UTC (rev 18993)
@@ -0,0 +1,63 @@
+/*
+ * Hibernate, Relational Persistence for Idiomatic Java
+ *
+ * Copyright (c) 2010, Red Hat Inc. or third-party contributors as
+ * indicated by the @author tags or express copyright attribution
+ * statements applied by the authors. All third-party contributions are
+ * distributed under license by Red Hat Inc.
+ *
+ * This copyrighted material is made available to anyone wishing to use, modify,
+ * copy, or redistribute it subject to the terms and conditions of the GNU
+ * Lesser General Public License, as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
+ * for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this distribution; if not, write to:
+ * Free Software Foundation, Inc.
+ * 51 Franklin Street, Fifth Floor
+ * Boston, MA 02110-1301 USA
+ */
+package org.hibernate.metadata.schema;
+
+import java.util.Iterator;
+
+/**
+ * Models a compound value (a tuple or row-value-constructor is SQL terms).
+ * <p/>
+ * IMPL NOTE : in terms of the tables themselves, SQL has no notion of a tuple/compound-value. We simply model
+ * it this way because:
+ * <ol>
+ * <li>Its a cleaner mapping to the logical model</li>
+ * <li>Allows more meaningful traversals from simple values back up to table through any intermediate tuples
+ * because it gives us a better understanding of the model.</li>
+ * </ol>
+ *
+ * @author Steve Ebersole
+ */
+public class Tuple extends AbstractValueContainer implements Value {
+ private final ValueContainer valueContainer;
+ private final String name;
+
+ public Tuple(ValueContainer valueContainer, String name) {
+ this.name = name;
+ this.valueContainer = valueContainer;
+ }
+
+ public ValueContainer getValueContainer() {
+ return valueContainer;
+ }
+
+ public String getUniqueValueQualifier() {
+ return name;
+ }
+
+ public String toDebugString() {
+ return getValueContainer().getUniqueValueQualifier() +
+ '.' + getUniqueValueQualifier() +
+ "{tuple}";
+ }
+}
Modified: sandbox/trunk/new-metadata/src/main/java/org/hibernate/metadata/schema/UniqueKey.java
===================================================================
--- sandbox/trunk/new-metadata/src/main/java/org/hibernate/metadata/schema/UniqueKey.java 2010-03-12 18:24:20 UTC (rev 18992)
+++ sandbox/trunk/new-metadata/src/main/java/org/hibernate/metadata/schema/UniqueKey.java 2010-03-12 20:31:19 UTC (rev 18993)
@@ -29,7 +29,7 @@
* @author Steve Ebersole
*/
public class UniqueKey extends AbstractColumnConstraint implements Constraint {
- protected UniqueKey(ValueContainer table, String name) {
+ protected UniqueKey(TableSpecification table, String name) {
super( table, name );
}
}
Modified: sandbox/trunk/new-metadata/src/main/java/org/hibernate/metadata/schema/Value.java
===================================================================
--- sandbox/trunk/new-metadata/src/main/java/org/hibernate/metadata/schema/Value.java 2010-03-12 18:24:20 UTC (rev 18992)
+++ sandbox/trunk/new-metadata/src/main/java/org/hibernate/metadata/schema/Value.java 2010-03-12 20:31:19 UTC (rev 18993)
@@ -35,21 +35,7 @@
*
* @return The owning table.
*/
- public ValueContainer getTable();
+ public ValueContainer getValueContainer();
- /**
- * Retrieve the datatype of this value.
- *
- * @return The value's datatype
- */
- public Datatype getDatatype();
-
- /**
- * Set the datatype of this value.
- *
- * @param datatype
- */
- public void setDatatype(Datatype datatype);
-
public String toDebugString();
}
Modified: sandbox/trunk/new-metadata/src/main/java/org/hibernate/metadata/schema/ValueContainer.java
===================================================================
--- sandbox/trunk/new-metadata/src/main/java/org/hibernate/metadata/schema/ValueContainer.java 2010-03-12 18:24:20 UTC (rev 18992)
+++ sandbox/trunk/new-metadata/src/main/java/org/hibernate/metadata/schema/ValueContainer.java 2010-03-12 20:31:19 UTC (rev 18993)
@@ -33,12 +33,6 @@
* @author Steve Ebersole
*/
public interface ValueContainer {
- /**
- * Get the primary key definition for this container.
- *
- * @return The PK definition.
- */
- public PrimaryKey getPrimaryKey();
/**
* Adds a value definition to the container.
@@ -54,8 +48,6 @@
*/
public Iterator iterateValues();
- public Set getSpaces();
-
/**
* Get a unique identifier which can be used to qualify {@link Value values} belonging to
* this container. Intended for use in logging.
@@ -65,4 +57,13 @@
public String getUniqueValueQualifier();
public String toDebugString();
+
+
+ // value factory methods ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+ public Column createColumn(String name);
+
+ public DerivedValue createDerivedValue(String fragment);
+
+ public Tuple createTuple(String name);
}
More information about the hibernate-commits
mailing list