social-profile/src/main/java/org/gcube/portlets/user/socialprofile/client/ui/DisplaySummary.java

140 lines
4.0 KiB
Java

package org.gcube.portlets.user.socialprofile.client.ui;
import org.gcube.portlets.user.socialprofile.client.SocialService;
import org.gcube.portlets.user.socialprofile.client.SocialServiceAsync;
import com.github.gwtbootstrap.client.ui.AlertBlock;
import com.github.gwtbootstrap.client.ui.constants.AlertType;
import com.google.gwt.core.client.GWT;
import com.google.gwt.dom.client.Style.Unit;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.safehtml.shared.SafeHtml;
import com.google.gwt.safehtml.shared.SimpleHtmlSanitizer;
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.Timer;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.HTML;
import com.google.gwt.user.client.ui.TextArea;
import com.google.gwt.user.client.ui.Widget;
public class DisplaySummary extends Composite {
private static DisplaySummaryUiBinder uiBinder = GWT
.create(DisplaySummaryUiBinder.class);
private final SocialServiceAsync socialService = GWT.create(SocialService.class);
interface DisplaySummaryUiBinder extends UiBinder<Widget, DisplaySummary> {
}
@UiField HTML summary;
@UiField TextArea summaryEditingArea;
@UiField Button saveSummary;
@UiField Button cancelEditSummary;
@UiField AlertBlock alertBlock;
public DisplaySummary() {
initWidget(uiBinder.createAndBindUi(this));
saveSummary.getElement().getStyle().setMarginRight(5, Unit.PX);
}
/**
* Set the summary text
* @param summaryText
*/
public void setSummary(String summaryText){
summary.setHTML(summaryText);
summaryEditingArea.setText(summaryText);
}
/**
* Hide the summary field and show the summaryEditingArea one
*/
public void enableEditing(){
summary.setVisible(false);
summaryEditingArea.setVisible(true);
saveSummary.setVisible(true);
cancelEditSummary.setVisible(true);
}
@UiHandler("saveSummary")
void onSaveClick(ClickEvent e){
// show alert block
alertBlock.setText("Changing backgroud summary information please wait...");
alertBlock.setType(AlertType.INFO);
// disable save button
saveSummary.setEnabled(false);
// sanitize html ...
final SafeHtml sanitizedHtml = SimpleHtmlSanitizer.sanitizeHtml(summaryEditingArea.getText());
socialService.saveProfessionalBackground(sanitizedHtml.asString(), new AsyncCallback<Boolean>() {
@Override
public void onSuccess(Boolean result) {
// save the new sanitizedHtml html as summary
if(result){
summary.setHTML(sanitizedHtml.asString());
summaryEditingArea.setText(sanitizedHtml.asString());
summary.setVisible(true);
summaryEditingArea.setVisible(false);
saveSummary.setVisible(false);
cancelEditSummary.setVisible(false);
alertBlock.setText("Background Summary successfully updated");
alertBlock.setType(AlertType.SUCCESS);
}else{
alertBlock.setText("Background Summary not updated sorry");
alertBlock.setType(AlertType.ERROR);
}
alertBlock.setVisible(true);
}
@Override
public void onFailure(Throwable caught) {
summary.setVisible(true);
summaryEditingArea.setVisible(false);
saveSummary.setVisible(false);
alertBlock.setText("Background Summary not updated sorry");
alertBlock.setType(AlertType.ERROR);
alertBlock.setVisible(true);
cancelEditSummary.setVisible(false);
}
});
// hide alert after a while
Timer t = new Timer() {
@Override
public void run() {
alertBlock.setVisible(false);
}
};
t.schedule(2000);
// enable save button
saveSummary.setEnabled(true);
}
@UiHandler("cancelEditSummary")
void onCancelClick(ClickEvent e){
// reset changes and exit
summaryEditingArea.setText(summary.getText());
summary.setVisible(true);
summaryEditingArea.setVisible(false);
saveSummary.setVisible(false);
cancelEditSummary.setVisible(false);
}
}