package de.tud.kom.socom.web.client.administration;
import java.util.List;
import com.google.gwt.core.client.GWT;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.event.dom.client.KeyCodes;
import com.google.gwt.event.dom.client.KeyPressEvent;
import com.google.gwt.event.logical.shared.OpenEvent;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.uibinder.client.UiHandler;
import com.google.gwt.user.client.ui.Anchor;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.Panel;
import com.google.gwt.user.client.ui.TextBox;
import com.google.gwt.user.client.ui.Tree;
import com.google.gwt.user.client.ui.TreeItem;
import com.google.gwt.user.client.ui.UIObject;
import com.google.gwt.user.client.ui.Widget;
import de.tud.kom.socom.web.client.administration.AdministrationPresenter.AdministrationViewInterface;
import de.tud.kom.socom.web.client.htmlelements.ErrorList;
import de.tud.kom.socom.web.client.htmlelements.ErrorListItemView;
import de.tud.kom.socom.web.client.sharedmodels.SimpleUser;
public class UserAdministrationView extends Composite implements AdministrationViewInterface<SimpleUser> {
private static UserAdministrationViewUiBinder uiBinder = GWT.create(UserAdministrationViewUiBinder.class);
@UiField
TextBox textBox;
@UiField
Tree tree;
@UiField
Button lookupButton;
@UiField
ErrorList errorList;
interface UserAdministrationViewUiBinder extends UiBinder<Widget, UserAdministrationView> {
}
private AdministrationPresenter presenter;
public UserAdministrationView(AdministrationPresenter presenter) {
this.presenter = presenter;
initWidget(uiBinder.createAndBindUi(this));
}
public UserAdministrationView(String firstName) {
initWidget(uiBinder.createAndBindUi(this));
}
@Override
public void showError(ErrorListItemView error) {
this.errorList.addError(error);
}
@Override
public void hideErrors() {
this.errorList.clear();
}
@Override
public void hideError(ErrorListItemView error) {
this.errorList.removeError(error);
}
@UiHandler("textBox")
void onTextBoxKeyPress(KeyPressEvent event) {
int keyCode = event.getCharCode();
if (keyCode == 0) {
// Probably Firefox
keyCode = event.getNativeEvent().getKeyCode();
}
if (keyCode == KeyCodes.KEY_ENTER) {
onLookupButtonClick(null);
}
}
@UiHandler("lookupButton")
void onLookupButtonClick(ClickEvent event) {
presenter.loadUsers(textBox.getText(), tree.getItem(0));
}
@UiHandler("tree")
void onTreeOpen(OpenEvent<TreeItem> event) {
TreeItem item = event.getTarget();
if(item.getText().length() > 1) return; // search field hack
String first = item.getText();
presenter.loadUsers(first, item);
}
@Override
public void updateInformation(List<SimpleUser> information, UIObject parent) {
if(information == null) {
//..
} else {
List<SimpleUser> userlist = information;
TreeItem item = (TreeItem) parent;
if(item.getText().length() == 1) item.removeItems(); // remove "Loading..." (w/ search field hack)
else
{
TreeItem seachField = item.getChild(0);
item.removeItems();
item.addItem(seachField);
}
if(userlist.isEmpty()) // if search field AND no user is found
{
Label noUserFoundLabel = new Label("Keinen Nutzer gefunden..");
item.addItem(noUserFoundLabel);
}
for(final SimpleUser user : userlist)
{
Panel p = new HorizontalPanel();
Anchor a = new Anchor(user.getName());
a.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
presenter.onUserClicked(user);
}
});
p.add(a);
if(user.isAdmin()) p.add(new Label(" (A)"));
// p.addStyleName();
item.addItem(p);
}
}
}
}