Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

HBX-2390: Create a JBoss Tools adaptation layer in Hibernate Tools #4280

Merged
merged 1 commit into from
Jul 3, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand Down
Original file line number Diff line number Diff line change
@@ -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<Column> getColumnIterator() {
return delegate.getColumnIterator();
}

@Override
public Iterator<ForeignKey> getForeignKeyIterator() {
Iterator<ForeignKey> iterator = delegate.getForeignKeyIterator();
return new Iterator<ForeignKey>() {
@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();
}

}
34 changes: 22 additions & 12 deletions jbt/src/main/java/org/hibernate/tool/orm/jbt/wrp/TableWrapper.java
Original file line number Diff line number Diff line change
@@ -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<Column> getColumnIterator();
Iterator<ForeignKey> getForeignKeyIterator();
String getComment();
String getRowId();
String getSubselect();
boolean hasDenormalizedTables();
boolean isAbstract();
boolean isAbstractUnionTable();
boolean isPhysicalTable();
Value getIdentifierValue();

}
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}
Expand All @@ -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());
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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; }



}