/**
* Copyright 2012 Red Hat, Inc. and/or its affiliates.
* <p/>
* 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
* <p/>
* http://www.apache.org/licenses/LICENSE-2.0
* <p/>
* 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.datamodeller.client.widgets.packageselector;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
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.kie.workbench.common.screens.datamodeller.client.DataModelerContext;
import org.kie.workbench.common.screens.datamodeller.client.util.DataModelerUtils;
import org.kie.workbench.common.screens.datamodeller.client.util.UIUtil;
import org.uberfire.commons.data.Pair;
import org.uberfire.mvp.Command;
@Dependent
public class PackageSelector
implements
PackageSelectorView.Presenter,
IsWidget {
private DataModelerContext context;
private List<String> packageList = new ArrayList<String>( );
private PackageSelectorView view;
private List<PackageSelectorView.PackageSelectorHandler> handlers = new ArrayList<PackageSelectorView.PackageSelectorHandler>( );
@Inject
public PackageSelector( PackageSelectorView view ) {
this.view = view;
view.init( this );
}
@Override
public Widget asWidget() {
return view.asWidget();
}
@Override
public void onPackageChange() {
handlePackageChange( view.getPackage() );
}
@Override
public void onNewPackage() {
view.showNewPackagePopup( new Command() {
@Override
public void execute() {
doPackageAdded( view.getNewPackage() );
}
} );
}
private void doPackageAdded( String newPackage ) {
final String newPackageName = DataModelerUtils.trim( newPackage );
if ( newPackageName != null && !"".equals( newPackageName ) ) {
boolean exists = packageList.contains( newPackageName );
if ( exists ) {
view.setPackage( newPackageName );
} else {
view.addToPackageList( newPackageName, true );
}
if ( context != null ) {
context.appendPackage( newPackageName.trim() );
}
}
handlePackageAdded( newPackageName );
}
private void handlePackageAdded( final String packageName ) {
for ( PackageSelectorView.PackageSelectorHandler handler : handlers ) {
handler.onPackageAdded( packageName );
}
}
private void handlePackageChange( String packageName ) {
for ( PackageSelectorView.PackageSelectorHandler handler : handlers ) {
handler.onPackageChange( packageName );
}
}
public void enableCreatePackage( boolean enable ) {
view.enableCreatePackage( enable );
}
public void setEnabled( boolean enabled ) {
view.setEnabled( enabled );
}
public boolean isValueSelected() {
String currentPackage = DataModelerUtils.trim( view.getPackage() );
return currentPackage != null && !"".equals( currentPackage ) && !UIUtil.NOT_SELECTED.equals( currentPackage );
}
public String getPackage() {
return view.getPackage();
}
public String getNewPackage() {
return view.getNewPackage();
}
public DataModelerContext getContext() {
return context;
}
public void setContext( DataModelerContext context ) {
this.context = context;
initList( null, true );
}
public void setCurrentPackage( String currentPackage ) {
boolean enableEmptyPackageOption = false;
if ( currentPackage == null || "".equals( currentPackage ) ) {
enableEmptyPackageOption = true;
currentPackage = UIUtil.NOT_SELECTED;
}
initList( currentPackage, enableEmptyPackageOption );
}
public void clear() {
view.initPackageList( new ArrayList<Pair<String, String>>(), null, true );
}
public void addPackageSelectorHandler( PackageSelectorView.PackageSelectorHandler handler ) {
if ( !handlers.contains( handler ) ) {
handlers.add( handler );
}
}
private void initList( String currentPackage, boolean enableEmptyPackageOption ) {
packageList.clear();
if ( context != null && context.getCurrentProjectPackages() != null ) {
for ( String packageName : context.getCurrentProjectPackages() ) {
packageList.add( packageName );
}
}
if ( currentPackage != null && !packageList.contains( currentPackage ) ) {
packageList.add( currentPackage );
}
Collections.sort( packageList );
List<Pair<String, String>> packageOptions = new ArrayList<Pair<String, String>>( packageList.size() );
for ( String packageName : packageList ) {
packageOptions.add( new Pair<String, String>( packageName, packageName ) );
}
view.initPackageList( packageOptions, currentPackage, enableEmptyPackageOption );
}
}