diff --git a/jbt/src/main/java/org/hibernate/tool/orm/jbt/wrp/DelegatingPersistentClassWrapperImpl.java b/jbt/src/main/java/org/hibernate/tool/orm/jbt/wrp/DelegatingPersistentClassWrapperImpl.java index a204d68211..165c6bc449 100644 --- a/jbt/src/main/java/org/hibernate/tool/orm/jbt/wrp/DelegatingPersistentClassWrapperImpl.java +++ b/jbt/src/main/java/org/hibernate/tool/orm/jbt/wrp/DelegatingPersistentClassWrapperImpl.java @@ -48,7 +48,12 @@ public boolean hasIdentifierProperty() { @Override public RootClass getRootClass() { - return delegate.getRootClass(); + RootClass result = delegate.getRootClass(); + if (result == delegate) { + return this; + } else { + return result == null ? null : new DelegatingPersistentClassWrapperImpl(result); + } } @Override @@ -84,7 +89,8 @@ public Property getProperty(String name) { @Override public Table getTable() { - return delegate.getTable(); + Table result = delegate.getTable(); + return result == null ? null : new DelegatingTableWrapperImpl(result); } @Override diff --git a/jbt/src/main/java/org/hibernate/tool/orm/jbt/wrp/DelegatingTableWrapperImpl.java b/jbt/src/main/java/org/hibernate/tool/orm/jbt/wrp/DelegatingTableWrapperImpl.java new file mode 100644 index 0000000000..f1feed101e --- /dev/null +++ b/jbt/src/main/java/org/hibernate/tool/orm/jbt/wrp/DelegatingTableWrapperImpl.java @@ -0,0 +1,110 @@ +package org.hibernate.tool.orm.jbt.wrp; + +import java.util.Iterator; + +import org.hibernate.mapping.Column; +import org.hibernate.mapping.ForeignKey; +import org.hibernate.mapping.KeyValue; +import org.hibernate.mapping.PrimaryKey; +import org.hibernate.mapping.Table; + +public class DelegatingTableWrapperImpl extends Table implements TableWrapper{ + + private Table delegate = null; + + public DelegatingTableWrapperImpl(Table t) { + delegate = t; + } + + @Override + public Table getWrappedObject() { + return delegate; + } + + @Override + public KeyValue getIdentifierValue() { + KeyValue result = delegate.getIdentifierValue(); + return result == null ? null : (KeyValue)ValueWrapperFactory.createValueWrapper(result); + } + + @Override + public String getName() { + return delegate.getName(); + } + + @Override + public void addColumn(Column column) { + delegate.addColumn(column); + } + + @Override + public String getCatalog() { + return delegate.getCatalog(); + } + + @Override + public String getSchema() { + return delegate.getSchema(); + } + + @Override + public PrimaryKey getPrimaryKey() { + return delegate.getPrimaryKey(); + } + + @Override + public Iterator getColumnIterator() { + return delegate.getColumnIterator(); + } + + @Override + public Iterator getForeignKeyIterator() { + Iterator iterator = delegate.getForeignKeyIterator(); + return new Iterator() { + @Override + public boolean hasNext() { + return iterator.hasNext(); + } + @Override + public ForeignKey next() { + return (ForeignKey)ForeignKeyWrapperFactory.createForeinKeyWrapper(iterator.next()); + } + }; + } + + @Override + public String getComment() { + return delegate.getComment(); + } + + @Override + public String getRowId() { + return delegate.getRowId(); + } + + @Override + public String getSubselect() { + return delegate.getSubselect(); + } + + @Override + public boolean hasDenormalizedTables() { + return delegate.hasDenormalizedTables(); + } + + @Override + public boolean isAbstract() { + return delegate.isAbstract(); + } + + @Override + public boolean isAbstractUnionTable() { + return delegate.isAbstractUnionTable(); + } + + @Override + public boolean isPhysicalTable() { + return delegate.isPhysicalTable(); + } + +} diff --git a/jbt/src/main/java/org/hibernate/tool/orm/jbt/wrp/TableWrapper.java b/jbt/src/main/java/org/hibernate/tool/orm/jbt/wrp/TableWrapper.java index ded3e0a440..860c02c8b1 100644 --- a/jbt/src/main/java/org/hibernate/tool/orm/jbt/wrp/TableWrapper.java +++ b/jbt/src/main/java/org/hibernate/tool/orm/jbt/wrp/TableWrapper.java @@ -1,18 +1,28 @@ package org.hibernate.tool.orm.jbt.wrp; -import org.hibernate.mapping.KeyValue; -import org.hibernate.mapping.Table; +import java.util.Iterator; -public class TableWrapper extends Table implements Wrapper { - - public TableWrapper(String name) { - super("HibernateTools", name); - } +import org.hibernate.mapping.Column; +import org.hibernate.mapping.ForeignKey; +import org.hibernate.mapping.PrimaryKey; +import org.hibernate.mapping.Value; + +public interface TableWrapper extends Wrapper { - @Override - public KeyValue getIdentifierValue() { - KeyValue result = super.getIdentifierValue(); - return result == null ? null : (KeyValue)ValueWrapperFactory.createValueWrapper(result); - } + String getName(); + void addColumn(Column column); + String getCatalog(); + String getSchema(); + PrimaryKey getPrimaryKey(); + Iterator getColumnIterator(); + Iterator getForeignKeyIterator(); + String getComment(); + String getRowId(); + String getSubselect(); + boolean hasDenormalizedTables(); + boolean isAbstract(); + boolean isAbstractUnionTable(); + boolean isPhysicalTable(); + Value getIdentifierValue(); } diff --git a/jbt/src/main/java/org/hibernate/tool/orm/jbt/wrp/ValueWrapperFactory.java b/jbt/src/main/java/org/hibernate/tool/orm/jbt/wrp/ValueWrapperFactory.java index 0209bf843a..686bdd564b 100644 --- a/jbt/src/main/java/org/hibernate/tool/orm/jbt/wrp/ValueWrapperFactory.java +++ b/jbt/src/main/java/org/hibernate/tool/orm/jbt/wrp/ValueWrapperFactory.java @@ -124,6 +124,8 @@ public Object invoke(Object proxy, Method method, Object[] args) throws Throwabl result = ValueWrapperFactory.createValueWrapper((Value)result); } else if ("getPropertyIterator".equals(valueClassMethod.getName())) { result = createWrappedPropertyIterator((Iterator)result); + } else if (result != null && "getAssociatedClass".equals(valueClassMethod.getName())) { + result = new DelegatingPersistentClassWrapperImpl((PersistentClass)result); } } else { result = method.invoke(this, args); diff --git a/jbt/src/main/java/org/hibernate/tool/orm/jbt/wrp/WrapperFactory.java b/jbt/src/main/java/org/hibernate/tool/orm/jbt/wrp/WrapperFactory.java index 9aba0b9492..36a34ec097 100644 --- a/jbt/src/main/java/org/hibernate/tool/orm/jbt/wrp/WrapperFactory.java +++ b/jbt/src/main/java/org/hibernate/tool/orm/jbt/wrp/WrapperFactory.java @@ -139,8 +139,9 @@ public static Object createDatabaseReaderWrapper(Properties properties, Object r } public static Object createTableWrapper(String name) { - TableWrapper result = new TableWrapper(name); - result.setPrimaryKey(new PrimaryKey(result)); + Table t = new Table("Hibernate Tools", name); + t.setPrimaryKey(new PrimaryKey(t)); + DelegatingTableWrapperImpl result = new DelegatingTableWrapperImpl(t); return result; } diff --git a/jbt/src/test/java/org/hibernate/tool/orm/jbt/wrp/TableWrapperTest.java b/jbt/src/test/java/org/hibernate/tool/orm/jbt/wrp/DelegatingTableWrapperImplTest.java similarity index 76% rename from jbt/src/test/java/org/hibernate/tool/orm/jbt/wrp/TableWrapperTest.java rename to jbt/src/test/java/org/hibernate/tool/orm/jbt/wrp/DelegatingTableWrapperImplTest.java index e4126208bb..a229724097 100644 --- a/jbt/src/test/java/org/hibernate/tool/orm/jbt/wrp/TableWrapperTest.java +++ b/jbt/src/test/java/org/hibernate/tool/orm/jbt/wrp/DelegatingTableWrapperImplTest.java @@ -6,17 +6,18 @@ import org.hibernate.mapping.BasicValue; import org.hibernate.mapping.KeyValue; +import org.hibernate.mapping.Table; import org.hibernate.tool.orm.jbt.util.DummyMetadataBuildingContext; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -public class TableWrapperTest { +public class DelegatingTableWrapperImplTest { - private TableWrapper tableWrapper = null; + private DelegatingTableWrapperImpl tableWrapper = null; @BeforeEach public void beforeEach() { - tableWrapper = new TableWrapper("foo"); + tableWrapper = new DelegatingTableWrapperImpl(new Table("Hibernate Tools", "foo")); KeyValue v = new BasicValue(DummyMetadataBuildingContext.INSTANCE); tableWrapper.setIdentifierValue(v); } @@ -30,7 +31,7 @@ public void testConstruction() { @Test public void testGetIdentifierValue() { KeyValue v = new BasicValue(DummyMetadataBuildingContext.INSTANCE); - tableWrapper.setIdentifierValue(v); + tableWrapper.getWrappedObject().setIdentifierValue(v); assertSame(v, ((Wrapper)tableWrapper.getIdentifierValue()).getWrappedObject()); } diff --git a/orm/src/main/java/org/hibernate/tool/ide/completion/HQLCompletionProposal.java b/orm/src/main/java/org/hibernate/tool/ide/completion/HQLCompletionProposal.java index c7c55e7e10..2ca671688c 100644 --- a/orm/src/main/java/org/hibernate/tool/ide/completion/HQLCompletionProposal.java +++ b/orm/src/main/java/org/hibernate/tool/ide/completion/HQLCompletionProposal.java @@ -189,5 +189,12 @@ public Property getProperty() { } + public int aliasRefKind() { return ALIAS_REF; } + public int entityNameKind() { return ENTITY_NAME; } + public int propertyKind() { return PROPERTY; } + public int keywordKind() { return KEYWORD; } + public int functionKind() { return FUNCTION; } + + }