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 { } 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() { @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() { @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("&", "&").replaceAll("<", "<") .replaceAll(">", ">"); } }