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

200 lines
6.8 KiB
Java
Raw Normal View History

package org.gcube.portlets.user.socialprofile.client.ui;
import org.gcube.portal.databook.shared.UserInfo;
import org.gcube.portlets.user.socialprofile.client.SocialService;
import org.gcube.portlets.user.socialprofile.client.SocialServiceAsync;
import org.gcube.portlets.user.socialprofile.shared.UserContext;
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.event.dom.client.ClickHandler;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.user.client.Window;
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.HTMLPanel;
import com.google.gwt.user.client.ui.Image;
import com.google.gwt.user.client.ui.TextBox;
import com.google.gwt.user.client.ui.Widget;
public class DisplayProfile extends Composite {
protected final static String HEADLINE_TEXT = "Professional Headline";
protected final static String HEADLINE_ERROR = "Your Headline please";
protected final static String ISTI_TEXT = "Company";
private static DisplayProfileUiBinder uiBinder = GWT
.create(DisplayProfileUiBinder.class);
interface DisplayProfileUiBinder extends UiBinder<Widget, DisplayProfile> {
}
public static final String avatar_default = GWT.getModuleBaseURL() + "../images/Avatar_default.png";
public static final String loading = GWT.getModuleBaseURL() + "../images/avatarLoader.gif";
public static final String savingImage = GWT.getModuleBaseURL() + "../images/saving.gif";
public static final String GET_OID_PARAMETER = "oid";
private final SocialServiceAsync socialService = GWT.create(SocialService.class);
@UiField HTMLPanel mainPanel;
@UiField Image avatarImage;
@UiField HTML userFullName;
@UiField TextBox headline;
@UiField TextBox institution;
@UiField HTML editHeadline;
@UiField HTML editIsti;
@UiField Image savingHeadline;
@UiField Button saveHead;
@UiField Button cancelHead;
@UiField Button messageButton;
private String currHeadLine;
private UserInfo myUserInfo;
public DisplayProfile() {
initWidget(uiBinder.createAndBindUi(this));
avatarImage.setUrl(loading);
mainPanel.addStyleName("framed");
savingHeadline.setUrl(savingImage);
socialService.getUserContext(getUserToShowId(), new AsyncCallback<UserContext>() {
@Override
public void onSuccess(UserContext result) {
myUserInfo = result.getUserInfo();
avatarImage.getElement().getParentElement().setAttribute("href", myUserInfo.getAccountURL());
avatarImage.setSize("100px", "100px");
avatarImage.setUrl(myUserInfo.getAvatarId());
userFullName.setText(myUserInfo.getFullName());
if (getUserToShowId() == null) { //its him seeing his profile
String head = (result.getHeadline() == null || result.getHeadline().compareTo("") == 0) ? HEADLINE_TEXT : result.getHeadline();
String isti = (result.getInstitution() == null ||result.getInstitution().compareTo("") == 0) ? ISTI_TEXT : result.getInstitution();
headline.setText(head);
institution.setText(isti);
editHeadline.setStyleName("editImage");
editHeadline.setTitle("Edit your Professional Headline");
headline.setMaxLength(35);
editIsti.setStyleName("editImage");
editIsti.setTitle("Edit your Company");
messageButton.removeFromParent();
currHeadLine = head;
if (result.getHeadline() == null || result.getHeadline().compareTo("") == 0) {
headline.getElement().getStyle().setOpacity(0.5);
institution.getElement().getStyle().setOpacity(0.5);
headline.getElement().getStyle().setWidth(270, Unit.PX);
institution.getElement().getStyle().setWidth(270, Unit.PX);
}
} else { //its someone else
String head = (result.getHeadline() == null || result.getHeadline().compareTo("") == 0) ? "" : result.getHeadline();
String isti = (result.getInstitution() == null || result.getInstitution().compareTo("") == 0) ? "" : result.getInstitution();
headline.setText(head);
institution.setText(isti);
avatarImage.getElement().getParentElement().setAttribute("href", "");
avatarImage.setTitle(myUserInfo.getFullName());
messageButton.setText("Private Message");
messageButton.setVisible(true);
}
}
@Override
public void onFailure(Throwable caught) {
Window.alert("Failure: " + caught.getMessage());
avatarImage.setSize("100px", "100px");
avatarImage.setUrl(avatar_default);
}
});
editHeadline.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
headline.addStyleName("edit");
headline.setReadOnly(false);
headline.setFocus(true);
headline.selectAll();
editHeadline.setVisible(false);
saveHead.setVisible(true);
cancelHead.setVisible(true);
}
});
saveHead.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
String toShare = escapeHtml(headline.getText());
if (toShare.equals("") || toShare.equals(HEADLINE_TEXT) || toShare.equals(HEADLINE_ERROR)) {
headline.setText(HEADLINE_ERROR);
} else {
currHeadLine = toShare;
saveHead.setVisible(false);
cancelHead.setVisible(false);
savingHeadline.setVisible(true);
headline.setReadOnly(true);
socialService.saveHeadline(currHeadLine, new AsyncCallback<Boolean>() {
@Override
public void onFailure(Throwable caught) {
Window.alert("Sorry, an error occurred");
cancelHeadline();
}
@Override
public void onSuccess(Boolean result) {
headline.removeStyleName("edit");
editHeadline.setVisible(true);
headline.getElement().getStyle().setOpacity(1.0);
}
});
}
}
});
cancelHead.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
cancelHeadline();
}
});
}
private void cancelHeadline() {
headline.removeStyleName("edit");
headline.setReadOnly(true);
editHeadline.setVisible(true);
saveHead.setVisible(false);
cancelHead.setVisible(false);
headline.setText(currHeadLine);
}
/**
* check if it has to show just one feed
* @return
*/
private String getUserToShowId() {
return Window.Location.getParameter(GET_OID_PARAMETER);
}
/**
* Escape an html string. Escaping data received from the client helps to
* prevent cross-site script vulnerabilities.
*
* @param html the html string to escape
* @return the escaped string
*/
private String escapeHtml(String html) {
if (html == null) {
return null;
}
return html.replaceAll("&", "&amp;").replaceAll("<", "&lt;")
.replaceAll(">", "&gt;");
}
}