[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