class SQLDataSetDefAttributesEditor implements IsWidget, org.dashbuilder.dataset.client.editor.SQLDataSetDefAttributesEditor {

    @PostConstruct
    public void init() {
        // Initialize the SQL specific attributes editor view.
        view.init(this);
        view.initWidgets(dataSource.view, dbSchema.view, dbTable.view, dbSQL.view);

        dataSource.setSelectHint(DataSetEditorConstants.INSTANCE.sql_datasource_selectHint());
        sqlProviderServices.call((List<SQLDataSourceDef> list) -> onSqlDataSourcesLoad(list)).getDataSourceDefs();

        dataSource.addHelpContent(DataSetEditorConstants.INSTANCE.sql_datasource(),
                DataSetEditorConstants.INSTANCE.sql_datasource_description(),
                Placement.RIGHT); //bottom placement would interfere with the dropdown
        dbSchema.addHelpContent(DataSetEditorConstants.INSTANCE.sql_schema(),
                DataSetEditorConstants.INSTANCE.sql_schema_description(),
                Placement.BOTTOM);
        dbTable.addHelpContent(DataSetEditorConstants.INSTANCE.sql_table(),
                DataSetEditorConstants.INSTANCE.sql_table_description(),
                Placement.BOTTOM);
        dbSQL.addHelpContent(DataSetEditorConstants.INSTANCE.sql_query(),
                DataSetEditorConstants.INSTANCE.sql_query_description(),
                Placement.BOTTOM);

        // Use query editor by default.
        onSelectQuery();
    }

    @Inject public  SQLDataSetDefAttributesEditor(final DropDownEditor dataSource,
                                         final ValueBoxEditor<String> dbSchema,
                                         final ValueBoxEditor<String> dbTable,
                                         final ValueBoxEditor<String> dbSQL,
                                         final Caller<SQLProviderServices> sqlProviderServices,
                                         final View view);

}