class ForeignKeyColumnProperty extends AbstractChildDocumentProperty<ForeignKey, ForeignKeyColumnProperty> 
implements ForeignKeyColumn,
           HasExpandedProperty,
           HasIdProperty,
           HasNameProperty,
           HasOrdinalPositionProperty,
           HasColumnProperty,
           HasNameProtectedProperty {
	
    public final StringProperty foreignDatabaseNameProperty() {
    	return stringPropertyOf(ForeignKeyColumnUtil.FOREIGN_DATABASE_NAME, ForeignKeyColumn.super::getForeignDatabaseName);
    }
    
    @Override
    public String getForeignDatabaseName() {
    	return foreignDatabaseNameProperty().get();
    }
    
    public final StringProperty foreignSchemaNameProperty() {
    	return stringPropertyOf(ForeignKeyColumnUtil.FOREIGN_SCHEMA_NAME, ForeignKeyColumn.super::getForeignSchemaName);
    }
    
    @Override
    public String getForeignSchemaName() {
    	return foreignSchemaNameProperty().get();
    }


    public ForeignKeyColumnProperty(ForeignKey parent) {
        super(parent);
    }

    public final StringProperty foreignTableNameProperty() {
        return stringPropertyOf(ForeignKeyColumnUtil.FOREIGN_TABLE_NAME, ForeignKeyColumn.super::getForeignTableName);
    }

    @Override
    public String getForeignTableName() {
        return foreignTableNameProperty().get();
    }

    public final StringProperty foreignColumnNameProperty() {
        return stringPropertyOf(ForeignKeyColumnUtil.FOREIGN_COLUMN_NAME, ForeignKeyColumn.super::getForeignColumnName);
    }

    @Override
    public String getForeignColumnName() {
        return foreignColumnNameProperty().get();
    }

    public final ObjectBinding<TableProperty> foreignTableProperty() {
        return createObjectBinding(
            () -> ForeignKeyColumn.super.findForeignTable()
                .map(TableProperty.class::cast)
                .orElse(null), 
            foreignTableNameProperty()
        );
    }

    @Override
    public Optional<TableProperty> findForeignTable() {
        return Optional.ofNullable(foreignTableProperty().get());
    }

    public final ObjectBinding<ColumnProperty> foreignColumnProperty() {<FILL_FUNCTION_BODY>}

    @Override
    public Optional<ColumnProperty> findForeignColumn() {
        return Optional.ofNullable(foreignColumnProperty().get());
    }
    
    @Override
    public ForeignKeyColumnPropertyMutator mutator() {
        return DocumentPropertyMutator.of(this);
    }
    
    @Override
    protected List<String> keyPathEndingWith(String key) {
        return concat(DocumentPropertyComponentUtil.FOREIGN_KEY_COLUMNS, key);
    }
}

        return createObjectBinding(
            () -> ForeignKeyColumn.super.findForeignColumn()
                .map(ColumnProperty.class::cast)
                .orElse(null), 
            foreignTableNameProperty(),
            foreignColumnNameProperty()
        );
    
<methods>public void <init>(com.speedment.runtime.config.ForeignKey) ,public final Optional<com.speedment.runtime.config.ForeignKey> getParent() <variables>private final non-sealed com.speedment.runtime.config.ForeignKey parent