/* * Copyright 2012 Red Hat, Inc. and/or its affiliates. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.ext.uberfire.social.activities.client.widgets.userbox; import javax.enterprise.context.Dependent; import com.google.gwt.core.client.GWT; import com.google.gwt.dom.client.Style; import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.event.dom.client.ClickHandler; import com.google.gwt.event.dom.client.MouseOverEvent; import com.google.gwt.event.dom.client.MouseOverHandler; import com.google.gwt.uibinder.client.UiBinder; import com.google.gwt.uibinder.client.UiField; import com.google.gwt.user.client.ui.Composite; import com.google.gwt.user.client.ui.Image; import com.google.gwt.user.client.ui.Widget; import org.ext.uberfire.social.activities.client.resources.i18n.Constants; import org.ext.uberfire.social.activities.client.user.SocialUserImageProvider; import org.ext.uberfire.social.activities.client.widgets.utils.FollowButton; import org.ext.uberfire.social.activities.client.widgets.utils.FollowButton.FollowType; import org.ext.uberfire.social.activities.model.SocialUser; import org.ext.uberfire.social.activities.service.SocialUserImageRepositoryAPI.ImageSize; import org.gwtbootstrap3.client.ui.Caption; import org.gwtbootstrap3.client.ui.Heading; import org.gwtbootstrap3.client.ui.ThumbnailPanel; import org.gwtbootstrap3.client.ui.constants.ImageType; import org.gwtbootstrap3.client.ui.html.Paragraph; import org.jboss.errai.ioc.client.container.IOC; import org.uberfire.mvp.Command; import org.uberfire.mvp.ParameterizedCommand; @Dependent public class UserBoxView extends Composite { private static final Constants constants = Constants.INSTANCE; private static HeaderViewBinder uiBinder = GWT.create(HeaderViewBinder.class); @UiField Caption caption; @UiField ThumbnailPanel panel; @UiField Heading username; @UiField Paragraph desc; private SocialUserImageProvider userImageProvider; public UserBoxView() { userImageProvider = IOC.getBeanManager().lookupBean(SocialUserImageProvider.class).getInstance(); } public void init(final SocialUser socialUser, final RelationType type, final ParameterizedCommand<String> onClick, final ParameterizedCommand<String> followUnfollowCommand) { initWidget(uiBinder.createAndBindUi(this)); setupUserBox(socialUser, userImageProvider.getImageForSocialUser(socialUser, ImageSize.BIG), onClick); setupFollowUnfollow(socialUser, type, followUnfollowCommand); } private void setupFollowUnfollow(final SocialUser socialUser, final RelationType type, final ParameterizedCommand<String> followUnfollowCommand) { if (type != RelationType.ME && followUnfollowCommand != null) { final FollowButton.FollowType followType = type == RelationType.UNFOLLOW ? FollowType.UNFOLLOW : FollowType.FOLLOW; final Command wrapper = new Command() { @Override public void execute() { followUnfollowCommand.execute(socialUser.getUserName()); } }; final FollowButton button = new FollowButton(followType, wrapper); button.addStyleName("center-block"); caption.add(button); } } private void setupUserBox(final SocialUser socialUser, Image userImage, final ParameterizedCommand<String> onClick) { final org.gwtbootstrap3.client.ui.Image image = new org.gwtbootstrap3.client.ui.Image(userImage.getUrl()); image.setType(ImageType.CIRCLE); image.setPixelSize(140, 140); if (onClick != null) { image.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { onClick.execute(socialUser.getUserName()); } }); } panel.insert(image, 0); createLink(socialUser, onClick); if (socialUser.getEmail().isEmpty()) { //Hide element so that box is the same size for all users desc.getElement().getStyle().setVisibility(Style.Visibility.HIDDEN); desc.setText("."); } else { desc.setText(socialUser.getEmail()); } } private void createLink(final SocialUser follower, final ParameterizedCommand<String> command) { username.setText(follower.getName()); if (command != null) { username.addDomHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { command.execute(follower.getUserName()); } }, ClickEvent.getType()); username.addDomHandler(new MouseOverHandler() { @Override public void onMouseOver(MouseOverEvent event) { username.getElement().getStyle().setCursor(Style.Cursor.POINTER); } }, MouseOverEvent.getType()); } } public String getUserName() { return username.getText(); } public enum RelationType { CAN_FOLLOW(UserBoxView.constants.Follow()), UNFOLLOW(UserBoxView.constants.Unfollow()), ME; private String label; RelationType() { } RelationType(String label) { this.label = label; } public String label() { return label; } } interface HeaderViewBinder extends UiBinder<Widget, UserBoxView> { } }