xPanelOptions.add(deleteLink);
setupDeleteClickHandler(deleteLink, msg, mainPanel);
}
CommentsListPanel commentsPanel = null;
if (!state.equals(State.READONLY))
{
commentsPanel = new CommentsListPanel(msg.getCommentCount(), msg.getEntityId(), msg.isCommentable(),
!singleView);
}
// row for who posted
Panel sourceMetaData = new FlowPanel();
sourceMetaData.addStyleName(StaticResourceBundle.INSTANCE.coreCss().messageMetadataSource());
for (StatefulRenderer itemRenderer : verbRenderer.getSourceMetaDataItemRenderers())
{
Widget metaDataItem = itemRenderer.render();
if (metaDataItem != null)
{
sourceMetaData.add(metaDataItem);
}
}
msgContent.add(sourceMetaData);
// content
FlowPanel nonMetaData = new FlowPanel();
nonMetaData.addStyleName(state.toString());
Widget content = verbRenderer.getContent();
if (content != null)
{
nonMetaData.add(content);
msgContent.add(nonMetaData);
}
// additional metadata
FlowPanel metaData = new FlowPanel();
metaData.addStyleName(StaticResourceBundle.INSTANCE.coreCss().messageMetadataAdditional());
for (StatefulRenderer itemRenderer : verbRenderer.getMetaDataItemRenderers())
{
Widget metaDataItem = itemRenderer.render();
if (metaDataItem != null)
{
metaData.add(metaDataItem);
}
}
if (metaData.getWidgetCount() > 0)
{
msgContent.add(metaData);
}
// timestamp and actions
Panel timestampActions = new FlowPanel();
timestampActions.addStyleName(StaticResourceBundle.INSTANCE.coreCss().messageTimestampActionsArea());
// Hijack this property and use to show lock icon for private activity.
if (!msg.isShareable())
{
Label lockIcon = new Label("");
lockIcon.addStyleName(StaticResourceBundle.INSTANCE.coreCss().privateIcon());
timestampActions.add(lockIcon);
}
String date = new DateFormatter(new Date()).timeAgo(msg.getPostedTime());
Widget dateLink;
if (createPermalink)
{
String permalinkUrl = activityLinkBuilder.buildActivityPermalink(msg.getId(), msg.getDestinationStream()
.getType(), msg.getDestinationStream().getUniqueIdentifier());
dateLink = new InlineHyperlink(date, permalinkUrl);
}
else
{
dateLink = new InlineLabel(date);
}
dateLink.addStyleName(StaticResourceBundle.INSTANCE.coreCss().messageTimestampLink());
timestampActions.add(dateLink);
if (msg.getAppName() != null)
{
String appSource = msg.getAppSource();
if (appSource != null)
{
FlowPanel viaPanel = new FlowPanel();
viaPanel.addStyleName(StaticResourceBundle.INSTANCE.coreCss().viaMetadata());
viaPanel.add(new InlineLabel("via "));
viaPanel.add(new Anchor(msg.getAppName(), appSource));
timestampActions.add(viaPanel);
}
else
{
InlineLabel viaLine = new InlineLabel("via " + msg.getAppName());
viaLine.addStyleName(StaticResourceBundle.INSTANCE.coreCss().viaMetadata());
timestampActions.add(viaLine);
}
// TODO: If appSource is not supplied, the link should go to the respective galleries for apps and plugins.
// However, the app galery requires knowing the start page tab id, and the worthwhile plugin gallery is only
// available to coordinators.
}
if (verbRenderer.getAllowLike())
{
LikeCountWidget likeCount = new LikeCountWidget(msg.getEntityId(), msg.getLikeCount(), msg.getLikers(),
msg.isLiked());
timestampActions.add(likeCount);
}
timestampActions.add(buildActions(msg, mainPanel, commentsPanel, verbRenderer));
msgContent.add(timestampActions);
// comments
if (commentsPanel != null)
{
mainPanel.add(commentsPanel);
if (msg.getComments() != null && !msg.getComments().isEmpty())
{
commentsPanel.renderAllComments(msg.getComments());
}
else
{
commentsPanel.renderFirstLast(msg.getFirstComment(), msg.getLastComment(), msg.getDestinationStream()
.getType(), msg.getDestinationStream().getUniqueIdentifier(), activityLinkBuilder);
}
if (showComment)
{
commentsPanel.activatePostComment();
}
}
return mainPanel;
}