package kornell.gui.client.presentation.message.compose;
import java.util.ArrayList;
import com.google.gwt.core.client.GWT;
import com.google.gwt.place.shared.PlaceController;
import com.google.gwt.user.client.ui.Widget;
import kornell.api.client.Callback;
import kornell.api.client.ChatThreadsClient;
import kornell.api.client.KornellSession;
import kornell.core.entity.EntityFactory;
import kornell.core.to.CourseClassTO;
import kornell.gui.client.KornellConstants;
import kornell.gui.client.ViewFactory;
import kornell.gui.client.personnel.MrPostman;
import kornell.gui.client.presentation.classroom.ClassroomPlace;
import kornell.gui.client.util.forms.FormHelper;
import kornell.gui.client.util.view.KornellNotification;
public class MessageComposePresenter implements MessageComposeView.Presenter {
private FormHelper formHelper = GWT.create(FormHelper.class);
private KornellConstants constants = GWT.create(KornellConstants.class);
private MessageComposeView view;
private PlaceController placeCtrl;
private ChatThreadsClient threadsClient;
private ViewFactory viewFactory;
private KornellSession session;
public MessageComposePresenter(PlaceController placeCtrl, KornellSession session, ViewFactory viewFactory, EntityFactory entityFactory) {
this.placeCtrl = placeCtrl;
this.threadsClient = session.chatThreads();
this.viewFactory = viewFactory;
this.session = session;
}
@Override
public void init(ArrayList<CourseClassTO> helpCourseClasses) {
if(view == null){
view = viewFactory.getMessageComposeView();
view.setPresenter(this);
}
//check if it's inside the classroom to preselect the recipient
view.show(helpCourseClasses, getCourseClassUUIDFromPlace());
}
private String getCourseClassUUIDFromPlace() {
if(placeCtrl.getWhere() instanceof ClassroomPlace){
return session.getCurrentCourseClass().getCourseClass().getUUID();
}
return null;
}
@Override
public void okButtonClicked() {
if(validateMessage()){
String messageText = view.getMessageText().getFieldPersistText();
Callback<String> chatThreadCallback = new Callback<String>() {
@Override
public void ok(String str) {
KornellNotification.show(constants.messageSentSuccess());
MrPostman.hide();
}
};
String threadSelectValue = view.getRecipient().getFieldPersistText();
if("platformSupport".equals(threadSelectValue)){
threadsClient.postMessageToSupportPlatformThread(messageText, chatThreadCallback);
} else if("institutionSupport".equals(threadSelectValue)){
threadsClient.postMessageToSupportInstitutionThread(messageText, chatThreadCallback);
} else {
threadsClient.postMessageToSupportCourseClassThread(messageText, threadSelectValue, chatThreadCallback);
}
}
}
@Override
public void cancelButtonClicked() {
MrPostman.hide();
}
private boolean validateMessage() {
view.clearErrors();
if (!formHelper.isLengthValid(view.getMessageText().getFieldPersistText(), 1, 1000)) {
view.getMessageText().setError(constants.noMessageBodyError());
}
return !view.checkErrors();
}
@Override
public Widget asWidget() {
return view.asWidget();
}
}