/* * Copyright 2015 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. * * 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.item; import com.google.gwt.core.client.GWT; 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.ui.Composite; import com.google.gwt.user.client.ui.FlowPanel; import com.google.gwt.user.client.ui.Image; import com.google.gwt.user.client.ui.Widget; import org.ext.uberfire.social.activities.client.user.SocialUserImageProvider; import org.ext.uberfire.social.activities.client.widgets.item.bundle.SocialBundleHelper; import org.ext.uberfire.social.activities.client.widgets.item.model.LinkCommandParams; import org.ext.uberfire.social.activities.client.widgets.item.model.SimpleItemWidgetModel; import org.ext.uberfire.social.activities.client.widgets.utils.SocialDateFormatter; import org.ext.uberfire.social.activities.model.SocialUser; import org.ext.uberfire.social.activities.service.SocialUserImageRepositoryAPI.ImageSize; import org.gwtbootstrap3.client.ui.Anchor; import org.gwtbootstrap3.client.ui.Heading; import org.gwtbootstrap3.client.ui.ImageAnchor; import org.gwtbootstrap3.client.ui.constants.Pull; import org.gwtbootstrap3.client.ui.html.Paragraph; import org.gwtbootstrap3.client.ui.html.Text; import org.jboss.errai.ioc.client.container.IOC; import org.uberfire.client.resources.UberfireResources; import org.uberfire.client.workbench.type.ClientResourceType; public class SimpleItemWidget extends Composite { private static final Image GENERIC_FILE_IMAGE = new Image(UberfireResources.INSTANCE.images().typeGenericFile()); private static MyUiBinder uiBinder = GWT.create(MyUiBinder.class); @UiField FlowPanel left; @UiField Heading heading; @UiField Paragraph desc; private SocialUserImageProvider imageProvider; public SimpleItemWidget() { imageProvider = IOC.getBeanManager().lookupBean(SocialUserImageProvider.class).getInstance(); } public void init(SimpleItemWidgetModel model) { initWidget(uiBinder.createAndBindUi(this)); if (!model.shouldIPrintIcon()) { createThumbNail(model.getSocialUser()); } else { createIcon(model); } createDescriptionContent(model); createHeadingContent(model); } private void createHeadingContent(final SimpleItemWidgetModel model) { heading.setText(model.getSocialUser().getName()); } private void createDescriptionContent(SimpleItemWidgetModel model) { if (model.getLinkText() != null) { desc.add(createLink(model)); desc.add(createText(model)); } else { desc.setText(model.getDescription()); } } private Widget createText(SimpleItemWidgetModel model) { final StringBuilder sb = new StringBuilder(" "); sb.append(SocialBundleHelper.getItemDescription(model.getItemDescription())); sb.append(" "); sb.append(SocialDateFormatter.format(model.getTimestamp())); return new Text(sb.toString()); } private void createIcon(final SimpleItemWidgetModel model) { if (model.isVFSLink()) { for (ClientResourceType type : model.getResourceTypes()) { if (type.accept(model.getLinkPath())) { addIconImage((Image) type.getIcon()); break; } } } else { final Image maybeAlreadyAttachedImage = GENERIC_FILE_IMAGE; addIconImage(maybeAlreadyAttachedImage); } } private void addIconImage(final Image image) { final ImageAnchor newImage = new ImageAnchor(); newImage.setUrl(image.getUrl()); newImage.setPull(Pull.LEFT); newImage.setAsMediaObject(true); left.add(newImage); } private Widget createLink(final SimpleItemWidgetModel model) { final Anchor link = new Anchor(); link.setText(model.getLinkText()); link.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { model.getLinkCommand().execute(new LinkCommandParams(model.getEventType(), model.getLinkURI(), model.getLinkType()) .withLinkParams(model.getLinkParams())); } }); return link; } private void createThumbNail(final SocialUser socialUser) { final Image userImage = imageProvider.getImageForSocialUser(socialUser, ImageSize.SMALL); addIconImage(userImage); } interface MyUiBinder extends UiBinder<Widget, SimpleItemWidget> { } }