/*
* Copyright 2016 Red Hat, Inc. and/or its affiliates.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.kie.workbench.common.screens.datasource.management.client.explorer.common;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import javax.enterprise.context.Dependent;
import javax.inject.Inject;
import com.google.gwt.user.client.ui.IsWidget;
import com.google.gwt.user.client.ui.Widget;
import org.jboss.errai.ioc.client.api.ManagedInstance;
import org.kie.workbench.common.screens.datasource.management.client.dbexplorer.DatabaseStructureExplorerScreen;
import org.kie.workbench.common.screens.datasource.management.model.DataSourceDefInfo;
import org.kie.workbench.common.screens.datasource.management.model.DriverDefInfo;
import org.uberfire.client.mvp.PlaceManager;
import org.uberfire.mvp.PlaceRequest;
@Dependent
public class DefExplorerContent
implements IsWidget,
DefExplorerContentView.Presenter {
private DefExplorerContentView view;
private ManagedInstance<DefItem> itemInstance;
private Map<String, DataSourceDefInfo> dataSourceItemsMap = new HashMap<>( );
private Map<String, DriverDefInfo> driverItemsMap = new HashMap<>( );
private PlaceManager placeManager;
private DefExplorerContentView.Handler handler;
@Inject
public DefExplorerContent( DefExplorerContentView view,
ManagedInstance<DefItem> itemInstance,
PlaceManager placeManager ) {
this.view = view;
this.itemInstance = itemInstance;
this.placeManager = placeManager;
view.init( this );
}
@Override
public Widget asWidget() {
return view.asWidget();
}
public void loadDataSources( Collection<DataSourceDefInfo> dataSourceDefInfos ) {
clearDataSources();
if ( dataSourceDefInfos != null ) {
DefItem item;
String itemName;
for ( DataSourceDefInfo dataSourceDefInfo : dataSourceDefInfos ) {
itemName = dataSourceDefInfo.getName() + ( dataSourceDefInfo.isManaged() ? "" : " (external)" );
item = createItem();
item.setName( itemName );
item.addItemHandler( new DefItemView.ItemHandler() {
@Override
public void onClick( String itemId ) {
onDataSourceItemClick( dataSourceItemsMap.get( itemId ) );
}
} );
dataSourceItemsMap.put( item.getId(), dataSourceDefInfo );
view.addDataSourceItem( item );
}
}
}
public void loadDrivers( Collection<DriverDefInfo> driverDefInfos ) {
clearDrivers();
if ( driverDefInfos != null ) {
DefItem item;
for ( DriverDefInfo driverDefInfo : driverDefInfos ) {
item = createItem();
item.setName( driverDefInfo.getName() );
item.addItemHandler( new DefItemView.ItemHandler() {
@Override
public void onClick( String itemId ) {
onDriverItemClick( driverItemsMap.get( itemId ) );
}
} );
driverItemsMap.put( item.getId(), driverDefInfo );
view.addDriverItem( item );
}
}
}
public void clear() {
clearDataSources();
clearDrivers();
}
public void clearDataSources() {
view.clearDataSources();
dataSourceItemsMap.clear();
}
private void clearDrivers() {
view.clearDrivers();
driverItemsMap.clear();
}
@Override
public void onAddDataSource() {
if ( handler != null ) {
handler.onAddDataSource();
}
}
@Override
public void onAddDriver() {
if ( handler != null ) {
handler.onAddDriver();
}
}
public void setHandler( DefExplorerContentView.Handler handler ) {
this.handler = handler;
}
protected void onDataSourceItemClick( DataSourceDefInfo dataSourceDefInfo ) {
PlaceRequest placeRequest;
if ( dataSourceDefInfo.isManaged() ) {
placeRequest = view.createEditorPlaceRequest( dataSourceDefInfo.getPath() );
} else {
placeRequest = view.createScreenPlaceRequest( DatabaseStructureExplorerScreen.SCREEN_ID );
placeRequest.addParameter( DatabaseStructureExplorerScreen.DATASOURCE_UUID_PARAM, dataSourceDefInfo.getUuid() );
placeRequest.addParameter( DatabaseStructureExplorerScreen.DATASOURCE_NAME_PARAM, dataSourceDefInfo.getName() );
}
placeManager.goTo( placeRequest );
}
protected void onDriverItemClick( DriverDefInfo driverDefInfo ) {
placeManager.goTo( view.createEditorPlaceRequest( driverDefInfo.getPath() ) );
}
protected DefItem createItem() {
return itemInstance.get();
}
}