package org.appfuse.webapp.client.ui.users.search;
import java.util.Set;
import javax.validation.ConstraintViolation;
import org.appfuse.webapp.client.application.base.view.AbstractProxySearchView;
import org.appfuse.webapp.client.application.utils.tables.CustomColumn;
import org.appfuse.webapp.client.proxies.UserProxy;
import org.appfuse.webapp.client.proxies.UsersSearchCriteriaProxy;
import com.github.gwtbootstrap.client.ui.Button;
import com.github.gwtbootstrap.client.ui.TextBox;
import com.google.gwt.cell.client.Cell.Context;
import com.google.gwt.cell.client.FieldUpdater;
import com.google.gwt.core.client.GWT;
import com.google.gwt.editor.client.Editor;
import com.google.gwt.editor.client.SimpleBeanEditorDriver;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.KeyCodes;
import com.google.gwt.event.dom.client.KeyDownEvent;
import com.google.gwt.safehtml.shared.SafeHtmlBuilder;
import com.google.gwt.safehtml.shared.SafeHtmlUtils;
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.cellview.client.HasKeyboardSelectionPolicy.KeyboardSelectionPolicy;
import com.google.gwt.user.client.ui.Anchor;
import com.google.gwt.user.client.ui.CheckBox;
import com.google.gwt.user.client.ui.Widget;
public class UsersSearchViewImpl extends AbstractProxySearchView<UserProxy, UsersSearchCriteriaProxy> implements UsersSearchView, Editor<UsersSearchCriteriaProxy> {
interface Binder extends UiBinder<Widget, UsersSearchViewImpl> { }
private static final Binder uiBinder = GWT.create(Binder.class);
interface Driver extends SimpleBeanEditorDriver<UsersSearchCriteriaProxy, UsersSearchViewImpl> { }
private Driver editorDriver = GWT.create(Driver.class);
@UiField TextBox searchTerm;
@UiField Button addButton;
@UiField Button doneButton;
@UiField com.google.gwt.user.client.ui.Button searchButton;
public UsersSearchViewImpl() {
initWidget(uiBinder.createAndBindUi(this));
getEditorDriver().initialize(this);
table.setKeyboardSelectionPolicy(KeyboardSelectionPolicy.DISABLED);
createTableColumns();
}
@UiHandler("addButton")
public void addButtonClicked(ClickEvent event) {
delegate.addClicked();
}
@UiHandler("doneButton")
public void doneClicked(ClickEvent event) {
delegate.cancelClicked();
}
@UiHandler("searchButton")
public void searchButtonClicked(ClickEvent event) {
delegate.searchClicked();
}
@UiHandler("searchTerm")
void defaultAction(KeyDownEvent event) {
if (event.getNativeKeyCode() == KeyCodes.KEY_ENTER) {
delegate.searchClicked();
}
}
public void createTableColumns() {
FieldUpdater<UserProxy, String> showDetails = new FieldUpdater<UserProxy, String>() {
@Override
public void update(int index, UserProxy object, String value) {
delegate.showDetails(UserProxy.class, object.getId().toString());
}
};
int columnNumber = 0;
paths.add("username");
table.addColumn(new CustomColumn<UserProxy, String>("username", true, showDetails) {
@Override
public String getValue(UserProxy user) {
return user.getUsername();
}
@Override
public void render(Context context, UserProxy object, SafeHtmlBuilder sb) {
Anchor anchor = new Anchor(SafeHtmlUtils.htmlEscape(getValue(object)));
sb.append(SafeHtmlUtils.fromTrustedString(anchor.toString()));
};
}, i18n.user_username());
table.setColumnWidth(columnNumber++, "25%");
paths.add("firstName");
paths.add("lastName");
table.addColumn(new CustomColumn<UserProxy, String>("firstName", true) {
@Override
public String getValue(UserProxy user) {
return user.getFirstName() + " " + user.getLastName();
}
}, i18n.activeUsers_fullName());
table.setColumnWidth(columnNumber++, "34%");
paths.add("email");
table.addColumn(new CustomColumn<UserProxy, String>("email", true) {
@Override
public String getValue(UserProxy user) {
return user.getEmail();
}
@Override
public void render(Context context, UserProxy object, SafeHtmlBuilder sb) {
String email = object.getEmail();
Anchor anchor = new Anchor(SafeHtmlUtils.htmlEscape(email), "mailto:" + email);
sb.append(SafeHtmlUtils.fromTrustedString(anchor.toString()));
};
}, i18n.user_email());
table.setColumnWidth(columnNumber++, "25%");
paths.add("enabled");
table.addColumn(new CustomColumn<UserProxy, Boolean>("enabled", true) {
@Override
public Boolean getValue(UserProxy user) {
return user.isEnabled();
}
@Override
public void render(Context context, UserProxy object, SafeHtmlBuilder sb) {
boolean isEnabled = object.isEnabled();
CheckBox checkBox = new CheckBox();
checkBox.setValue(isEnabled);
checkBox.setEnabled(false);
sb.append(SafeHtmlUtils.fromTrustedString(checkBox.toString()));
};
}, i18n.user_enabled());
table.setColumnWidth(columnNumber++, "16%");
}
/**
* @return the editorDriver
*/
@Override
protected Driver getEditorDriver() {
return editorDriver;
}
}