/*
* Copyright (C) 2011 4th Line GmbH, Switzerland
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.fourthline.konto.client.ledger.account;
import com.google.web.bindery.event.shared.EventBus;
import org.seamless.gwt.component.client.suggest.SuggestionSelectPresenter;
import org.seamless.gwt.component.client.suggest.SuggestionSelectView;
import org.fourthline.konto.client.service.LedgerServiceAsync;
import org.seamless.gwt.notify.client.ServerFailureNotifyEvent;
import org.fourthline.konto.shared.AccountType;
import org.fourthline.konto.shared.entity.AccountGroup;
/**
* @author Christian Bauer
*/
public class AccountGroupSelectPresenter extends SuggestionSelectPresenter<AccountGroupSuggestion> {
final EventBus bus;
final LedgerServiceAsync service;
String name;
AccountType type;
String initalName;
public AccountGroupSelectPresenter(SuggestionSelectView view, EventBus bus, LedgerServiceAsync service) {
super(view);
this.bus = bus;
this.service = service;
}
public void startWith(AccountType type, String groupName) {
this.type = type;
this.name = groupName;
this.initalName = groupName;
super.startWith(null);
}
public void setAccountType(AccountType type) {
this.type = type;
}
public AccountType getType() {
return type;
}
public String getName() {
return name;
}
@Override
public void nameEntered(final String name) {
if (this.name != null && this.name.equals(name)) return;
if (name != null && name.equals(initalName)) return;
this.name = name;
executeQuery(name);
}
@Override
public void deselect() {
onAccountGroupDeselect();
}
@Override
public void reset() {
getView().setName(initalName);
onAccountGroupDeselect();
}
@Override
public void onSelection(AccountGroupSuggestion selected) {
onAccountGroupSelection(selected.getAccountGroup());
}
protected void onAccountGroupDeselect() {
this.name = null;
}
protected void onAccountGroupSelection(AccountGroup selected) {
this.name = selected.getName();
getView().setName(name);
}
protected void executeQuery(String groupName) {
service.getAccountGroups(type, groupName, new SuggestionCallback<AccountGroup>() {
@Override
protected void handleFailure(Throwable caught) {
bus.fireEvent(new ServerFailureNotifyEvent(caught));
}
@Override
protected AccountGroupSuggestion createSuggestion(int index, AccountGroup result) {
return new AccountGroupSuggestion(result);
}
});
}
}