package com.giftoftheembalmer.gotefarm.client;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.FlexTable;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.SimpleCheckBox;
import com.google.gwt.user.client.ui.VerticalPanel;
import java.util.List;
public class RoleAndBadgeEditor extends Composite {
VerticalPanel vpanel = new VerticalPanel();
String flavor1; // e.g., Roles
public RoleAndBadgeEditor(String flavor1) {
this.flavor1 = flavor1;
vpanel.setWidth("100%");
initWidget(vpanel);
setStyleName("RoleAndBadgeEditor");
}
public <A extends BadgeAndRole, B extends ChrBadgeAndRole, C extends BadgeAndRoleClickHandlerFactory>
void update(List<A> roles, B[] chrroles, C clickListener) {
vpanel.clear();
FlexTable flex = new FlexTable();
flex.setWidth("100%");
vpanel.add(new Label(flavor1 + " - Check all that apply"));
int row = 0;
for (final A role : roles) {
final SimpleCheckBox hasrole = new SimpleCheckBox();
flex.setWidget(row, 0, hasrole);
boolean has_role = false;
boolean is_waiting = false;
for (B chrrole : chrroles) {
if (chrrole.getKey().equals(role.getKey())) {
has_role = true;
hasrole.addClickHandler(
clickListener.newClickHandler(flex, row, chrrole)
);
is_waiting = chrrole.isWaiting();
break;
}
}
if (has_role) {
hasrole.setChecked(true);
if (is_waiting) {
flex.setText(row, 2, "pending admin approval");
}
}
else {
hasrole.addClickHandler(clickListener.newClickHandler(
flex, row, new ChrBadgeAndRole() {
public String getKey() { return role.getKey(); }
public String getName() { return role.getName(); }
public String getMessage() { return null; }
public boolean isRestricted() { return role.isRestricted(); }
public boolean isApproved() { return !role.isRestricted(); }
public boolean isWaiting() { return role.isRestricted(); }
}));
}
flex.setText(row, 1, role.getName());
// TODO: Show if request has been denied, show admin message if
// any
++row;
}
vpanel.add(flex);
}
}