/**
* @author Jonathan
*/
package com.abewy.android.apps.klyph.adapter.subAdapter;
import java.util.Arrays;
import java.util.List;
import android.annotation.TargetApi;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.ActivityNotFoundException;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.res.Resources;
import android.text.Spannable;
import android.text.SpannableString;
import android.text.style.RelativeSizeSpan;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.PopupMenu;
import android.widget.Toast;
import com.abewy.android.apps.klyph.Klyph;
import com.abewy.android.apps.klyph.KlyphBundleExtras;
import com.abewy.android.apps.klyph.R;
import com.abewy.android.apps.klyph.adapter.MultiObjectAdapter;
import com.abewy.android.apps.klyph.adapter.SpecialLayout;
import com.abewy.android.apps.klyph.adapter.holder.IStreamHolder;
import com.abewy.android.apps.klyph.app.PostActivity;
import com.abewy.android.apps.klyph.core.KlyphSession;
import com.abewy.android.apps.klyph.core.fql.Attachment;
import com.abewy.android.apps.klyph.core.fql.Link;
import com.abewy.android.apps.klyph.core.fql.Media;
import com.abewy.android.apps.klyph.core.fql.Photo;
import com.abewy.android.apps.klyph.core.fql.Status;
import com.abewy.android.apps.klyph.core.fql.Stream;
import com.abewy.android.apps.klyph.core.fql.Video;
import com.abewy.android.apps.klyph.core.graph.GraphObject;
import com.abewy.android.apps.klyph.core.request.Response;
import com.abewy.android.apps.klyph.core.util.AlertUtil;
import com.abewy.android.apps.klyph.core.util.AttrUtil;
import com.abewy.android.apps.klyph.facebook.IFbPermissionCallback;
import com.abewy.android.apps.klyph.facebook.IFbPermissionWorker;
import com.abewy.android.apps.klyph.request.AsyncRequest;
import com.abewy.android.apps.klyph.request.AsyncRequest.Query;
import com.facebook.Session;
public class StreamButtonBar implements IFbPermissionCallback
{
private final MultiObjectAdapter parentAdapter;
private final int specialLayout;
private boolean pendingLike = false;
private boolean pendingDelete = false;
private IStreamHolder pendingHolder;
private Stream pendingStream;
private GraphObject pendingSubStream;
private final List<String> PERMISSIONS = Arrays.asList("publish_actions", "status_update");
public StreamButtonBar(MultiObjectAdapter parentAdapter, int specialLayout)
{
this.parentAdapter = parentAdapter;
this.specialLayout = specialLayout;
}
protected Context getContext(View view)
{
return view.getContext();
}
protected MultiObjectAdapter getParentAdapter()
{
return parentAdapter;
}
public void mergeData(IStreamHolder holder, final Stream stream)
{
mergeData(holder, stream, null);
}
public void mergeData(IStreamHolder holder, final Stream stream, final GraphObject subStream)
{
if (holder.getButtonBar() != null)
{
manageListeners(holder, stream, subStream);
manageButtons(holder, stream, subStream);
}
}
private void manageListeners(final IStreamHolder holder, final Stream stream, final GraphObject subStream)
{
final Context context = getContext(holder.getAuthorProfileImage());
/*
* ((FlipImageView) holder.getLikeButton()).setOnFlipListener(new FlipImageView.OnFlipListener() {
*
* @Override
* public void onClick(FlipImageView view)
* {
* handleLikeAction(holder, stream, subStream);
* }
*
* @Override
* public void onFlipStart(FlipImageView view)
* {
*
* }
*
* @Override
* public void onFlipEnd(FlipImageView view)
* {
*
* }
* });
*/
holder.getLikeButton().setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v)
{
handleLikeAction(holder, stream, subStream);
}
});
if (specialLayout != SpecialLayout.STREAM_DETAIL)
{
holder.getCommentButton().setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v)
{
context.startActivity(Klyph.getIntentForGraphObject((Activity) context, stream));
}
});
}
holder.getShareButton().setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v)
{
handleShareAction(holder, stream);
}
});
if (specialLayout != SpecialLayout.STREAM_DETAIL)
{
holder.getOverflowButton().setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v)
{
handleOverflowAction(holder, stream);
// handleDeleteAction(holder, stream);
}
});
}
}
private void handleLikeAction(IStreamHolder holder, final Stream stream, final GraphObject subStream)
{
pendingLike = false;
Session session = Session.getActiveSession();
List<String> permissions = session.getPermissions();
if (!permissions.containsAll(PERMISSIONS))
{
pendingLike = true;
requestPermissions(holder, stream, subStream);
return;
}
doLikeAction(holder, stream, subStream);
}
private void doLikeAction(final IStreamHolder holder, final Stream stream, final GraphObject subStream)
{
manageLikeButton(holder, stream, subStream, false);
final Context context = getContext(holder.getAuthorProfileImage());
if (getUserLikes(stream, subStream) == false)
{
setLikes(stream, subStream, true);
manageLikeButton(holder, stream, subStream, false);
Log.d("StreamButtonBar", "doLikeAction: " + stream.getPost_id());
Log.d("StreamButtonBar", "doLikeAction: " + subStream);
Log.d("StreamButtonBar", "doLikeAction: " + getId(stream, subStream));
new AsyncRequest(Query.POST_LIKE, getId(stream, subStream), "", new AsyncRequest.Callback() {
@Override
public void onComplete(Response response)
{
Log.d("onComplete", "" + response.getError());
if (response.getError() != null)
{
Toast.makeText(context, R.string.like_error, Toast.LENGTH_SHORT).show();
setLikes(stream, subStream, false);
}
manageLikeButton(holder, stream, subStream, true);
getParentAdapter().notifyDataSetChanged();
}
}).execute();
}
else
{
setLikes(stream, subStream, false);
manageLikeButton(holder, stream, subStream, false);
new AsyncRequest(Query.POST_UNLIKE, getId(stream, subStream), "", new AsyncRequest.Callback() {
@Override
public void onComplete(Response response)
{
Log.d("onComplete", "" + response.getError());
if (response.getError() != null)
{
Toast.makeText(context, R.string.unlike_error, Toast.LENGTH_SHORT).show();
setLikes(stream, subStream, true);
}
manageLikeButton(holder, stream, subStream, true);
getParentAdapter().notifyDataSetChanged();
}
}).execute();
}
}
private void handleOverflowAction(final IStreamHolder holder, final Stream stream)
{
PopupMenu popup = new PopupMenu(holder.getOverflowButton().getContext(), holder.getOverflowButton());
if (getCanDelete(stream))
popup.getMenu().add(Menu.NONE, R.id.menu_delete, Menu.NONE, R.string.delete);
if (getCanShare(stream))
popup.getMenu().add(Menu.NONE, R.id.menu_share_with, Menu.NONE, R.string.share_with);
popup.getMenu().add(Menu.NONE, R.id.menu_view_profile, Menu.NONE, R.string.view_profile);
popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item)
{
int id = item.getItemId();
if (id == R.id.menu_delete)
{
handleDeleteAction(holder, stream);
return true;
}
if (id == R.id.menu_share_with)
{
handleShareWithAction(holder, stream);
return true;
}
if (id == R.id.menu_view_profile)
{
handleViewProfileAction(holder, stream);
return true;
}
return false;
}
});
holder.getOverflowButton().setTag(popup);
popup.show();
}
private void handleDeleteAction(final IStreamHolder holder, final Stream stream)
{
pendingDelete = false;
Session session = Session.getActiveSession();
List<String> permissions = session.getPermissions();
if (!permissions.containsAll(PERMISSIONS))
{
pendingDelete = true;
requestPermissions(holder, stream, null);
return;
}
doDeleteAction(holder, stream);
}
private void doDeleteAction(final IStreamHolder holder, final Stream stream)
{
final Context context = getContext(holder.getAuthorProfileImage());
AlertUtil.showAlert(context, R.string.delete_post_confirmation_title, R.string.delete_post_confirmation_message, R.string.yes,
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface arg0, int arg1)
{
delete(holder.getOverflowButton(), stream);
}
}, R.string.no, null);
}
private void handleShareAction(final IStreamHolder holder, final Stream stream)
{
Intent intent = new Intent(getContext(holder.getShareButton()), PostActivity.class);
intent.putExtra(KlyphBundleExtras.SHARE, true);
Attachment att = stream.getAttachment();
if (stream.isLink())
{
Link link = stream.getLink();
intent.putExtra(KlyphBundleExtras.SHARE_LINK_URL, link.getUrl());
intent.putExtra(KlyphBundleExtras.SHARE_LINK_IMAGE_URL, link.getPicture());
intent.putExtra(KlyphBundleExtras.SHARE_LINK_NAME, link.getTitle());
intent.putExtra(KlyphBundleExtras.SHARE_LINK_DESC, link.getSummary());
}
else if (stream.isPhoto()/* || att.isPhoto() */)
{
Photo photo = stream.getPhoto();
intent.putExtra(KlyphBundleExtras.SHARE_PHOTO_ID, stream.isPhoto() ? photo.getObject_id() : att.getFb_object_id());
}
else if (stream.isVideo()/* || att.isVideo() */)
{
Video video = stream.getVideo();
intent.putExtra(KlyphBundleExtras.SHARE_VIDEO_ID, stream.isVideo() ? video.getVid() : att.getFb_object_id());
}
/*
* else if (att.isAlbum())
* {
* intent.putExtra(KlyphBundleExtras.SHARE_ALBUM_ID, att.getFb_object_id());
* }
*/
else
{
intent.putExtra(KlyphBundleExtras.SHARE_POST_ID, stream);
Log.d("StreamButtonBar", "Share something but I do not what");
}
getContext(holder.getShareButton()).startActivity(intent);
}
private void handleShareWithAction(final IStreamHolder holder, final Stream stream)
{
Intent intent = new Intent();
intent.setAction(Intent.ACTION_SEND);
Attachment att = stream.getAttachment();
if (stream.isLink())
{
Link link = stream.getLink();
intent.putExtra(Intent.EXTRA_TEXT, link.getUrl());
intent.putExtra(Intent.EXTRA_SUBJECT, link.getTitle());
intent.setType("text/plain");
}
else if (stream.isPhoto()/* || att.isPhoto() */)
{
Photo photo = stream.getPhoto();
intent.putExtra(Intent.EXTRA_TEXT, photo.getLargestImageURL());
if (photo.getCaption().length() > 0)
intent.putExtra(Intent.EXTRA_SUBJECT, photo.getCaption());
else if (stream.getMessage().length() > 0)
intent.putExtra(Intent.EXTRA_SUBJECT, stream.getMessage());
intent.setType("text/plain");
// intent.putExtra(KlyphBundleExtras.SHARE_PHOTO_ID, stream.isPhoto() ? photo.getObject_id() : att.getFb_object_id());
}
else if (stream.isVideo()/* || att.isVideo() */)
{
Video video = stream.getVideo();
intent.putExtra(Intent.EXTRA_TEXT, video.getSrc_hq());
if (video.getTitle().length() > 0)
intent.putExtra(Intent.EXTRA_SUBJECT, video.getTitle());
else if (stream.getMessage().length() > 0)
intent.putExtra(Intent.EXTRA_SUBJECT, stream.getMessage());
intent.setType("text/plain");
// intent.putExtra(KlyphBundleExtras.SHARE_VIDEO_ID, stream.isVideo() ? video.getVid() : att.getFb_object_id());
}
/*
* else if (att.isAlbum())
* {
* intent.putExtra(KlyphBundleExtras.SHARE_ALBUM_ID, att.getFb_object_id());
* }
*/
else if (att.getMedia().size() == 1)
{
Media m = att.getMedia().get(0);
intent.putExtra(Intent.EXTRA_TEXT, m.getSrc());
intent.putExtra(Intent.EXTRA_SUBJECT, m.getAlt());
intent.setType("text/plain");
}
else
{
if (stream.getMessage().length() > 0)
{
intent.putExtra(Intent.EXTRA_TEXT, stream.getMessage());
intent.setType("text/plain");
}
else if (stream.getDescription().length() > 0)
{
intent.putExtra(Intent.EXTRA_TEXT, stream.getDescription());
intent.setType("text/plain");
}
}
try
{
getContext(holder.getShareButton()).startActivity(intent);
}
catch (ActivityNotFoundException e)
{
}
}
private void handleViewProfileAction(final IStreamHolder holder, Stream stream)
{
holder.getOverflowButton()
.getContext()
.startActivity(
Klyph.getIntentForParams(holder.getOverflowButton().getContext(), stream.getActor_id(), stream.getActor_name(),
stream.getActor_type()));
}
private void requestPermissions(final IStreamHolder holder, final Stream stream, final GraphObject subStream)
{
pendingHolder = holder;
pendingStream = stream;
pendingSubStream = subStream;
((IFbPermissionWorker) getContext(holder.getAuthorProfileImage())).requestPublishPermissions(this, PERMISSIONS);
}
@Override
public void onPermissionsChange()
{
if (pendingLike == true)
{
pendingLike = false;
Session session = Session.getActiveSession();
List<String> permissions = session.getPermissions();
if (permissions.containsAll(PERMISSIONS))
{
handleLikeAction(pendingHolder, pendingStream, pendingSubStream);
pendingHolder = null;
pendingStream = null;
pendingSubStream = null;
}
}
else if (pendingDelete == true)
{
pendingDelete = false;
Session session = Session.getActiveSession();
List<String> permissions = session.getPermissions();
if (permissions.containsAll(PERMISSIONS))
{
handleDeleteAction(pendingHolder, pendingStream);
pendingHolder = null;
pendingStream = null;
pendingSubStream = null;
}
}
}
@Override
public void onCancelPermissions()
{
}
private void manageButtons(IStreamHolder holder, Stream stream, GraphObject subStream)
{
int likeCount = getLikeCount(stream, subStream);
String numLike = String.valueOf(likeCount);
int res = likeCount > 1 ? R.string.number_of_likes : R.string.zero_or_one_like;
String likeStr = getContext(holder.getLikeButton()).getString(res, numLike);
final SpannableString likeText = new SpannableString(likeStr);
int index = likeStr.indexOf(numLike);
likeText.setSpan(new RelativeSizeSpan(1.3f), index, index + numLike.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
// holder.getButtonBarText1().setText(likeText);
int commentCount = getCommentCount(stream, subStream);
String numComment = String.valueOf(commentCount);
res = commentCount > 1 ? R.string.number_of_comments : R.string.zero_or_one_comment;
String commentStr = getContext(holder.getLikeButton()).getString(res, numComment);
final SpannableString commentText = new SpannableString(commentStr);
index = commentStr.indexOf(numComment);
commentText.setSpan(new RelativeSizeSpan(1.3f), index, index + numComment.length(), Spannable.SPAN_EXCLUSIVE_INCLUSIVE);
// holder.getButtonBarText2().setText(commentText);
// holder.getButtonBarText2().setSingleLine();
// holder.getButtonBarText2().setEllipsize(TruncateAt.MARQUEE);
manageLikeButton(holder, stream, subStream);
manageCommentButton(holder, stream, subStream);
manageShareButton(holder, stream, subStream);
manageOverflowButton(holder, stream);
boolean likeVisible = holder.getLikeButton().getVisibility() == View.VISIBLE;
boolean commentVisible = holder.getCommentButton().getVisibility() == View.VISIBLE;
boolean shareVisible = holder.getShareButton().getVisibility() == View.VISIBLE;
boolean overflowVisible = holder.getOverflowButton() != null ? holder.getOverflowButton().getVisibility() == View.VISIBLE : false;
if (likeVisible || commentVisible || shareVisible || overflowVisible)
{
holder.getButtonBar().setVisibility(View.VISIBLE);
}
}
private int padding8 = -1;
private int padding12 = -1;
private void manageLikeButton(IStreamHolder holder, Stream stream, GraphObject subStream)
{
if (getCanLike(stream, subStream) == true)
{
int iconId = R.attr.cardLikeIcon;
if (getUserLikes(stream, subStream) == true)
{
iconId = R.attr.userLikeBaselineIcon2;
}
iconId = AttrUtil.getResourceId(getContext(holder.getAuthorProfileImage()), iconId);
holder.getLikeButton().setCompoundDrawablesWithIntrinsicBounds(iconId, 0, 0, 0);
Resources res = holder.getLikeButton().getContext().getResources();
if (padding8 == -1)
padding8 = res.getDimensionPixelSize(R.dimen.dip_8);
if (padding12 == -1)
padding12 = res.getDimensionPixelSize(R.dimen.dip_12);
int likeCount = getLikeCount(stream, subStream);
if (likeCount > 0)
{
holder.getLikeButton().setPadding(padding8, 0, padding8, 0);
holder.getLikeButton().setCompoundDrawablePadding(4);
holder.getLikeButton().setText(String.valueOf(likeCount));
}
else
{
holder.getLikeButton().setPadding(padding12, 0, padding8, 0);
holder.getLikeButton().setText("");
}
holder.getLikeButton().setVisibility(View.VISIBLE);
}
else
{
holder.getLikeButton().setVisibility(View.GONE);
}
}
private void manageLikeButton(IStreamHolder holder, Stream stream, GraphObject subStream, boolean enabled)
{
manageLikeButton(holder, stream, subStream);
holder.getLikeButton().setEnabled(enabled);
}
private void manageCommentButton(IStreamHolder holder, Stream stream, GraphObject subStream)
{
if (getCanComment(stream, subStream) == true)
{
int commentCount = getCommentCount(stream, subStream);
if (commentCount > 0)
{
int icon = AttrUtil.getResourceId(holder.getCommentButton().getContext(), R.attr.cardCommentIcon);
holder.getCommentButton().setCompoundDrawablesWithIntrinsicBounds(icon, 0, 0, 0);
holder.getCommentButton().setCompoundDrawablePadding(4);
holder.getCommentButton().setText(String.valueOf(commentCount));
}
else
{
holder.getCommentButton().setCompoundDrawablesWithIntrinsicBounds(0, 0, 0, 0);
holder.getCommentButton().setText(holder.getCommentButton().getContext().getString(R.string.comment));
}
holder.getCommentButton().setVisibility(View.VISIBLE);
}
else
{
holder.getCommentButton().setVisibility(View.GONE);
}
}
private void manageOverflowButton(IStreamHolder holder, Stream stream)
{
holder.getOverflowButton().setVisibility(specialLayout == SpecialLayout.STREAM_DETAIL ? View.GONE : View.VISIBLE);
if (holder.getOverflowButton().getTag() != null)
{
removeOverflowPopup(holder.getOverflowButton());
}
}
@TargetApi(11)
private void removeOverflowPopup(View view)
{
((PopupMenu) view.getTag()).dismiss();
view.setTag(null);
}
private void manageShareButton(IStreamHolder holder, Stream stream, GraphObject subStream)
{
if (getCanShare(stream))
{
holder.getShareButton().setVisibility(View.VISIBLE);
}
else
{
holder.getShareButton().setVisibility(View.GONE);
}
}
private void delete(View button, final Stream stream)
{
final Context context = getContext(button);
final AlertDialog dialog = AlertUtil.showAlert(context, R.string.delete, R.string.deleting);
new AsyncRequest(Query.DELETE_POST, stream.getPost_id(), "", new AsyncRequest.Callback() {
@Override
public void onComplete(Response response)
{
Log.d("onComplete", "" + response.getError());
dialog.dismiss();
if (response.getError() != null)
{
AlertUtil.showAlert(context, R.string.error, R.string.delete_post_error, R.string.ok);
}
else
{
Toast.makeText(context, R.string.post_deleted, Toast.LENGTH_SHORT).show();
getParentAdapter().remove(stream, true);
}
}
}).execute();
}
private String getId(Stream stream, GraphObject subStream)
{
if (subStream == null)
{
return stream.getObjectId();
}
else
{
if (subStream instanceof Link)
{
return ((Link) subStream).getLink_id();
}
else if (subStream instanceof Photo)
{
return ((Photo) subStream).getObject_id();
}
else if (subStream instanceof Video)
{
return ((Video) subStream).getVid();
}
else if (subStream instanceof Status)
{
return ((Status) subStream).getStatus_id();
}
return "";
}
}
private void setLikes(Stream stream, GraphObject subStream, boolean like)
{
int factor = 1 * (like == true ? 1 : -1);
if (subStream == null)
{
stream.getLike_info().setUser_likes(like);
stream.getLike_info().setLike_count(stream.getLike_info().getLike_count() + factor);
}
else
{
if (subStream instanceof Link)
{
((Link) subStream).getLike_info().setUser_likes(like);
((Link) subStream).getLike_info().setLike_count(((Link) subStream).getLike_info().getLike_count() + factor);
}
else if (subStream instanceof Photo)
{
((Photo) subStream).getLike_info().setUser_likes(like);
((Photo) subStream).getLike_info().setLike_count(((Photo) subStream).getLike_info().getLike_count() + factor);
}
else if (subStream instanceof Video)
{
}
else if (subStream instanceof Status)
{
((Status) subStream).getLike_info().setUser_likes(like);
((Status) subStream).getLike_info().setLike_count(((Status) subStream).getLike_info().getLike_count() + factor);
}
}
}
private boolean getUserLikes(Stream stream, GraphObject subStream)
{
if (stream.getLike_info().getCan_like() == false && subStream != null)
{
if (subStream instanceof Link)
{
return ((Link) subStream).getLike_info().getUser_likes();
}
else if (subStream instanceof Photo)
{
return ((Photo) subStream).getLike_info().getUser_likes();
}
else if (subStream instanceof Video)
{
return false;
}
else if (subStream instanceof Status)
{
return ((Status) subStream).getLike_info().getUser_likes();
}
return false;
}
else
{
return stream.getLike_info().getUser_likes();
}
}
private boolean getCanLike(Stream stream, GraphObject subStream)
{
if (stream.getLike_info().getCan_like() == false && subStream != null)
{
if (subStream instanceof Link)
{
return ((Link) subStream).getLike_info().getCan_like();
}
else if (subStream instanceof Photo)
{
return ((Photo) subStream).getLike_info().getCan_like();
}
else if (subStream instanceof Video)
{
return false;
}
else if (subStream instanceof Status)
{
return ((Status) subStream).getLike_info().getCan_like();
}
return false;
}
else
{
return stream.getLike_info().getCan_like();
}
}
private boolean getCanComment(Stream stream, GraphObject subStream)
{
if (stream.getComment_info().getCan_comment() == false && subStream != null)
{
if (subStream instanceof Link)
{
return ((Link) subStream).getComment_info().getCan_comment();
}
else if (subStream instanceof Photo)
{
return ((Photo) subStream).getComment_info().getCan_comment();
}
else if (subStream instanceof Video)
{
return false;
}
else if (subStream instanceof Status)
{
return ((Status) subStream).getComment_info().getCan_comment();
}
return false;
}
else
{
return stream.getComment_info().getCan_comment();
}
}
private boolean getCanShare(Stream stream)
{
return stream.getPermalink() != null && stream.getPermalink().length() > 0;
}
private boolean getCanDelete(Stream stream)
{
return stream.getApp_id().equals(Klyph.FACEBOOK_APP_ID) && stream.getSource_id().equals(KlyphSession.getSessionUserId());
}
private int getLikeCount(Stream stream, GraphObject subStream)
{
if (stream.getLike_info().getCan_like() == false && subStream != null)
{
if (subStream instanceof Link)
{
return ((Link) subStream).getLike_info().getLike_count();
}
else if (subStream instanceof Photo)
{
return ((Photo) subStream).getLike_info().getLike_count();
}
else if (subStream instanceof Video)
{
return 0;
}
else if (subStream instanceof Status)
{
return ((Status) subStream).getLike_info().getLike_count();
}
return 0;
}
else
{
return stream.getLike_info().getLike_count();
}
}
private int getCommentCount(Stream stream, GraphObject subStream)
{
if (stream.getComment_info().getCan_comment() == false && subStream != null)
{
if (subStream instanceof Link)
{
return ((Link) subStream).getComment_info().getComment_count();
}
else if (subStream instanceof Photo)
{
return ((Photo) subStream).getComment_info().getComment_count();
}
else if (subStream instanceof Video)
{
return 0;
}
else if (subStream instanceof Status)
{
return ((Status) subStream).getComment_info().getComment_count();
}
return 0;
}
else
{
return stream.getComment_info().getComment_count();
}
}
}