package kornell.gui.client.presentation.message.compose;
import java.util.ArrayList;
import java.util.List;
import com.github.gwtbootstrap.client.ui.ListBox;
import com.google.gwt.core.shared.GWT;
import com.google.gwt.event.dom.client.ClickEvent;
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.Button;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.FlowPanel;
import com.google.gwt.user.client.ui.Image;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.Widget;
import kornell.api.client.KornellSession;
import kornell.core.entity.RoleType;
import kornell.core.to.CourseClassTO;
import kornell.core.to.RoleTO;
import kornell.gui.client.KornellConstants;
import kornell.gui.client.util.forms.FormHelper;
import kornell.gui.client.util.forms.formfield.KornellFormFieldWrapper;
import kornell.gui.client.util.forms.formfield.ListBoxFormField;
public class GenericMessageComposeView extends Composite implements MessageComposeView {
interface GenericMessageComposeUiBinder extends UiBinder<Widget, GenericMessageComposeView> {
}
private static GenericMessageComposeUiBinder uiBinder = GWT.create(GenericMessageComposeUiBinder.class);
private static FormHelper formHelper = GWT.create(FormHelper.class);
private static KornellConstants constants = GWT.create(KornellConstants.class);
private MessageComposeView.Presenter presenter;
KornellFormFieldWrapper recipient, messageText;
private List<KornellFormFieldWrapper> fields;
private KornellSession session;
@UiField
Label lblTitle;
@UiField
Label lblSubTitle;
@UiField
Image separatorBar;
@UiField
FlowPanel fieldsPanel;
@UiField
Button btnOK;
@UiField
Button btnCancel;
public GenericMessageComposeView(KornellSession session) {
this.session = session;
initWidget(uiBinder.createAndBindUi(this));
ensureDebugId("genericMessageComposeView");
}
@Override
public void show(ArrayList<CourseClassTO> helpCourseClasses, String courseClassUUID) {
lblTitle.setText(constants.composeTitle());
lblSubTitle.setText(constants.composeSubTitle());
separatorBar.setUrl(FormHelper.SEPARATOR_BAR_IMG_PATH);
separatorBar.addStyleName(FormHelper.SEPARATOR_BAR_CLASS);
this.fields = new ArrayList<KornellFormFieldWrapper>();
fieldsPanel.clear();
boolean hasPlatformThreadAccess = false;
boolean hasInstitutionThreadAccess = false;
final ListBox recipients = new ListBox();
for (RoleTO roleTO : session.getCurrentUser().getRoles()) {
if(RoleType.institutionAdmin.equals(roleTO.getRole().getRoleType())){
hasPlatformThreadAccess = true;
} else if(RoleType.courseClassAdmin.equals(roleTO.getRole().getRoleType())){
hasInstitutionThreadAccess = true;
}
}
if(hasPlatformThreadAccess){
recipients.addItem(constants.platformAdminLabel(), "platformSupport");
}
if(hasInstitutionThreadAccess){
recipients.addItem(constants.institutionAdmin() + ": " + session.getInstitution().getName(), "institutionSupport");
}
for (CourseClassTO courseClassTO : helpCourseClasses) {
recipients.addItem(constants.courseClassAdmin() + ": " + courseClassTO.getCourseClass().getName(), courseClassTO.getCourseClass().getUUID());
}
if (courseClassUUID == null && recipients.getItemCount() <= 0)
this.setVisible(false);
recipients.setSelectedValue(courseClassUUID);
recipient = new KornellFormFieldWrapper(constants.recipient(), new ListBoxFormField(recipients), recipients.getItemCount() > 1 && (hasPlatformThreadAccess || courseClassUUID == null));
fields.add(recipient);
fieldsPanel.add(recipient);
messageText = new KornellFormFieldWrapper(constants.message(), formHelper.createTextAreaFormField(""), true);
fields.add(messageText);
fieldsPanel.add(messageText);
}
@Override
protected void onEnsureDebugId(String baseID) {
recipient.ensureDebugId(baseID + "-recipient");
messageText.ensureDebugId(baseID + "-messageText");
btnOK.ensureDebugId(baseID + "-btnOK");
btnCancel.ensureDebugId(baseID + "-btnCancel");
}
@UiHandler("btnOK")
void onOkButtonClicked(ClickEvent e) {
presenter.okButtonClicked();
}
@UiHandler("btnCancel")
void onCancelButtonClicked(ClickEvent e) {
presenter.cancelButtonClicked();
}
@Override
public void setPresenter(Presenter p) {
presenter = p;
}
@Override
public KornellFormFieldWrapper getRecipient() {
return recipient;
}
@Override
public KornellFormFieldWrapper getMessageText() {
return messageText;
}
@Override
public boolean checkErrors() {
return formHelper.checkErrors(fields);
}
@Override
public void clearErrors() {
formHelper.clearErrors(fields);
}
}