2013-04-04 15:41:17 +02:00
package org.gcube.portlets.user.newsfeed.client.panels ;
import java.util.ArrayList ;
2013-04-05 16:16:07 +02:00
import java.util.Date ;
2015-07-15 18:47:28 +02:00
import java.util.HashSet ;
2013-04-04 15:41:17 +02:00
2016-01-28 15:28:06 +01:00
import net.eliasbalasis.tibcopagebus4gwt.client.PageBusAdapterException ;
2016-01-26 18:28:08 +01:00
2016-04-06 16:35:20 +02:00
import org.gcube.common.portal.GCubePortalConstants ;
2013-04-19 15:38:20 +02:00
import org.gcube.portal.databook.client.GCubeSocialNetworking ;
2013-10-07 01:02:11 +02:00
import org.gcube.portal.databook.client.util.Encoder ;
2016-01-19 14:35:27 +01:00
import org.gcube.portal.databook.shared.Attachment ;
2013-04-04 15:41:17 +02:00
import org.gcube.portal.databook.shared.ClientFeed ;
import org.gcube.portal.databook.shared.Comment ;
2016-02-04 18:04:25 +01:00
import org.gcube.portal.databook.shared.EnhancedFeed ;
2013-04-04 15:41:17 +02:00
import org.gcube.portal.databook.shared.Feed ;
import org.gcube.portal.databook.shared.FeedType ;
import org.gcube.portal.databook.shared.Like ;
import org.gcube.portal.databook.shared.PrivacyLevel ;
2016-08-03 16:29:59 +02:00
import org.gcube.portal.databook.shared.ShowUserStatisticAction ;
2013-04-04 15:41:17 +02:00
import org.gcube.portal.databook.shared.UserInfo ;
2016-04-06 16:35:20 +02:00
import org.gcube.portlets.user.gcubewidgets.client.ClientScopeHelper ;
2013-04-04 15:41:17 +02:00
import org.gcube.portlets.user.newsfeed.client.FilterType ;
2016-01-28 15:28:06 +01:00
import org.gcube.portlets.user.newsfeed.client.NewsFeed ;
2013-04-04 15:41:17 +02:00
import org.gcube.portlets.user.newsfeed.client.NewsService ;
import org.gcube.portlets.user.newsfeed.client.NewsServiceAsync ;
import org.gcube.portlets.user.newsfeed.client.event.AddCommentEvent ;
import org.gcube.portlets.user.newsfeed.client.event.AddCommentEventHandler ;
import org.gcube.portlets.user.newsfeed.client.event.AddLikeEvent ;
import org.gcube.portlets.user.newsfeed.client.event.AddLikeEventHandler ;
import org.gcube.portlets.user.newsfeed.client.event.DeleteCommentEvent ;
import org.gcube.portlets.user.newsfeed.client.event.DeleteCommentEventHandler ;
import org.gcube.portlets.user.newsfeed.client.event.DeleteFeedEvent ;
import org.gcube.portlets.user.newsfeed.client.event.DeleteFeedEventHandler ;
import org.gcube.portlets.user.newsfeed.client.event.EditCommentEvent ;
import org.gcube.portlets.user.newsfeed.client.event.EditCommentEventHandler ;
2013-07-11 12:19:36 +02:00
import org.gcube.portlets.user.newsfeed.client.event.OpenFeedEvent ;
import org.gcube.portlets.user.newsfeed.client.event.OpenFeedEventHandler ;
2016-01-28 15:28:06 +01:00
import org.gcube.portlets.user.newsfeed.client.event.PageBusEvents ;
2013-04-04 15:41:17 +02:00
import org.gcube.portlets.user.newsfeed.client.event.SeeCommentsEvent ;
import org.gcube.portlets.user.newsfeed.client.event.SeeCommentsEventHandler ;
import org.gcube.portlets.user.newsfeed.client.event.SeeLikesEvent ;
import org.gcube.portlets.user.newsfeed.client.event.SeeLikesEventHandler ;
2014-03-11 19:29:39 +01:00
import org.gcube.portlets.user.newsfeed.client.event.ShowMoreUpdatesEvent ;
import org.gcube.portlets.user.newsfeed.client.event.ShowMoreUpdatesEventHandler ;
2013-04-08 17:25:37 +02:00
import org.gcube.portlets.user.newsfeed.client.event.ShowNewUpdatesEvent ;
import org.gcube.portlets.user.newsfeed.client.event.ShowNewUpdatesEventHandler ;
2014-04-08 23:40:13 +02:00
import org.gcube.portlets.user.newsfeed.client.event.UnLikeEvent ;
import org.gcube.portlets.user.newsfeed.client.event.UnLikeEventHandler ;
2014-04-11 13:02:15 +02:00
import org.gcube.portlets.user.newsfeed.client.ui.FilterPanel ;
2015-05-06 17:34:45 +02:00
import org.gcube.portlets.user.newsfeed.client.ui.LoadingText ;
2014-04-11 13:02:15 +02:00
import org.gcube.portlets.user.newsfeed.client.ui.NewFeedsAvailable ;
2014-10-07 16:41:08 +02:00
import org.gcube.portlets.user.newsfeed.client.ui.ResultsFor ;
2014-04-11 13:02:15 +02:00
import org.gcube.portlets.user.newsfeed.client.ui.ShowMoreFeeds ;
import org.gcube.portlets.user.newsfeed.client.ui.SingleComment ;
import org.gcube.portlets.user.newsfeed.client.ui.TweetTemplate ;
2014-03-13 16:07:35 +01:00
import org.gcube.portlets.user.newsfeed.shared.MoreFeedsBean ;
2014-04-08 23:40:13 +02:00
import org.gcube.portlets.user.newsfeed.shared.NewsConstants ;
2015-05-18 16:30:22 +02:00
import org.gcube.portlets.user.newsfeed.shared.OperationResult ;
2013-04-04 17:29:51 +02:00
import org.gcube.portlets.user.newsfeed.shared.UserSettings ;
2014-04-02 15:29:51 +02:00
import org.gcube.portlets.widgets.sessionchecker.client.CheckSession ;
2013-10-07 01:02:11 +02:00
import org.gcube.portlets.widgets.userselection.client.UserSelectionDialog ;
import org.gcube.portlets.widgets.userselection.client.events.SelectedUserEvent ;
import org.gcube.portlets.widgets.userselection.client.events.SelectedUserEventHandler ;
import org.gcube.portlets.widgets.userselection.client.events.UsersFetchedEvent ;
2013-12-10 18:10:40 +01:00
import org.gcube.portlets.widgets.userselection.shared.ItemSelectableBean ;
2016-01-28 15:28:06 +01:00
import org.jsonmaker.gwt.client.base.Defaults ;
2013-04-04 15:41:17 +02:00
2016-05-05 19:07:36 +02:00
import com.github.gwtbootstrap.client.ui.Row ;
2013-04-04 15:41:17 +02:00
import com.google.gwt.core.client.GWT ;
import com.google.gwt.core.client.RunAsyncCallback ;
2013-04-10 11:49:04 +02:00
import com.google.gwt.dom.client.Document ;
2014-04-02 01:01:27 +02:00
import com.google.gwt.dom.client.Style.Unit ;
2013-04-04 15:41:17 +02:00
import com.google.gwt.event.shared.HandlerManager ;
import com.google.gwt.user.client.Timer ;
import com.google.gwt.user.client.Window ;
2013-10-07 01:02:11 +02:00
import com.google.gwt.user.client.Window.Location ;
2014-04-02 01:01:27 +02:00
import com.google.gwt.user.client.Window.ScrollEvent ;
import com.google.gwt.user.client.Window.ScrollHandler ;
2013-04-04 15:41:17 +02:00
import com.google.gwt.user.client.rpc.AsyncCallback ;
import com.google.gwt.user.client.ui.Composite ;
import com.google.gwt.user.client.ui.HTML ;
2015-12-11 14:16:21 +01:00
import com.google.gwt.user.client.ui.HTMLPanel ;
2013-04-04 15:41:17 +02:00
import com.google.gwt.user.client.ui.HasAlignment ;
import com.google.gwt.user.client.ui.HasVerticalAlignment ;
import com.google.gwt.user.client.ui.HorizontalPanel ;
import com.google.gwt.user.client.ui.Image ;
2013-04-05 16:16:07 +02:00
import com.google.gwt.user.client.ui.SimplePanel ;
2013-04-04 15:41:17 +02:00
import com.google.gwt.user.client.ui.VerticalPanel ;
2014-04-02 01:01:27 +02:00
import com.google.gwt.user.client.ui.Widget ;
2013-04-04 15:41:17 +02:00
/ * *
*
* @author Massimiliano Assante , ISTI - CNR
*
* /
public class NewsFeedPanel extends Composite {
2014-04-09 18:45:21 +02:00
/ * *
* the current scope on the client can be static
* /
private static String currentScope ;
2013-04-04 15:41:17 +02:00
/ * *
* Create a remote service proxy to talk to the server - side News service .
* /
private final NewsServiceAsync newsService = GWT . create ( NewsService . class ) ;
private final HandlerManager eventBus = new HandlerManager ( null ) ;
private VerticalPanel mainPanel = new VerticalPanel ( ) ;
2013-04-19 15:38:20 +02:00
private HorizontalPanel filterPanelWrapper = new HorizontalPanel ( ) ;
private FilterPanel filterPanel ;
2013-04-05 16:16:07 +02:00
private SimplePanel newUpdatesPanel = new SimplePanel ( ) ;
2016-05-05 19:07:36 +02:00
private Row showMoreUpdatesPanel = new Row ( ) ;
2013-04-04 15:41:17 +02:00
private VerticalPanel newsPanel = new VerticalPanel ( ) ;
2013-04-11 12:58:50 +02:00
2013-04-08 17:25:37 +02:00
private NewFeedsAvailable newsFeedAlert ;
2013-04-04 15:41:17 +02:00
private static final String warning = GWT . getModuleBaseURL ( ) + " ../images/warning_blue.png " ;
private static final String spacer = GWT . getModuleBaseURL ( ) + " ../images/feeds-spacer.gif " ;
public static final String loading = GWT . getModuleBaseURL ( ) + " ../images/feeds-loader.gif " ;
2013-04-05 16:16:07 +02:00
2013-04-19 14:24:54 +02:00
public static final String GET_OID_PARAMETER = " oid " ;
2016-08-30 17:11:46 +02:00
public static final String LIKE_LABEL = " Like " ;
public static final String LIKED_LABEL = " Liked " ;
2013-04-04 15:41:17 +02:00
public static final String COMMENT_LABEL = " Reply " ;
2016-01-19 10:25:30 +01:00
public static final String SHARE_FWD_LABEL = " Share " ;
2016-02-15 15:37:58 +01:00
private static final int SEARCHED_FEEDS_TO_SHOW = 10 ;
2016-08-03 16:29:59 +02:00
private static final int FEEDS_RELATED_TO_USER_STATISTICS_TO_SHOW = 10 ;
2014-03-10 16:47:02 +01:00
2014-02-13 10:17:48 +01:00
private String vreLabel ;
2014-10-07 16:41:08 +02:00
2014-03-10 16:47:02 +01:00
private boolean showFeedTimelineSource = false ;
private boolean isInfrastructure = false ;
2013-04-05 16:16:07 +02:00
private int delayMillis = 300000 ; //5 minutes by default (is read from a configuration file in the first async callback)
2013-04-11 12:58:50 +02:00
2013-04-05 16:16:07 +02:00
private int currNewUpdatesNo = 0 ;
2013-04-04 15:41:17 +02:00
private boolean isFirstTweet = false ;
2016-02-15 15:37:58 +01:00
// is user searching for something?
private boolean isSearch = false ;
// the current query (if isSearch is true)
protected String currentQuery ;
2016-08-03 16:29:59 +02:00
// is the user seeing her statistics?
private boolean isFeedsRelatedToStatistics = false ;
// the feeds related to user statistics to show
protected ShowUserStatisticAction relatedFeedsToUserStatisticsToShow ;
2015-05-06 17:34:45 +02:00
private LoadingText loadingIcon = new LoadingText ( ) ;
2013-04-04 15:41:17 +02:00
private Image loadingImage ;
private UserInfo myUserInfo ;
private FilterType currentFilter ;
private Timer feedsTimer ;
2014-04-02 01:01:27 +02:00
private ShowMoreFeeds showMoreWidget ;
2014-03-13 16:07:35 +01:00
//needed to know the next range start
private Integer fromStartingPoint ;
2013-04-05 16:16:07 +02:00
private ArrayList < EnhancedFeed > allUpdates = new ArrayList < EnhancedFeed > ( ) ;
private ArrayList < EnhancedFeed > tempCacheNewUpdates = new ArrayList < EnhancedFeed > ( ) ;
2013-04-04 15:41:17 +02:00
/ * *
* events binder
* /
private void bind ( ) {
2014-03-11 19:29:39 +01:00
eventBus . addHandler ( ShowMoreUpdatesEvent . TYPE , new ShowMoreUpdatesEventHandler ( ) {
@Override
public void onShowMoreUpdatesClick ( ShowMoreUpdatesEvent event ) {
doShowMoreUpdates ( ) ;
}
} ) ;
2014-03-13 16:07:35 +01:00
2013-04-08 17:25:37 +02:00
eventBus . addHandler ( ShowNewUpdatesEvent . TYPE , new ShowNewUpdatesEventHandler ( ) {
@Override
public void onShowNewUpdatesClick ( ShowNewUpdatesEvent event ) {
doShowCachedNewUpdates ( ) ;
}
} ) ;
2013-04-05 16:16:07 +02:00
2013-04-04 15:41:17 +02:00
eventBus . addHandler ( AddLikeEvent . TYPE , new AddLikeEventHandler ( ) {
@Override
public void onAddLike ( AddLikeEvent event ) {
doAddLike ( event . getOwner ( ) , event . getFeedId ( ) ) ;
}
} ) ;
2014-10-07 16:41:08 +02:00
2014-04-08 23:40:13 +02:00
eventBus . addHandler ( UnLikeEvent . TYPE , new UnLikeEventHandler ( ) {
@Override
public void onUnLike ( UnLikeEvent event ) {
doUnLike ( event . getOwner ( ) , event . getFeedId ( ) ) ;
}
} ) ;
2013-04-04 15:41:17 +02:00
eventBus . addHandler ( AddCommentEvent . TYPE , new AddCommentEventHandler ( ) {
@Override
public void onAddComment ( AddCommentEvent event ) {
2014-04-10 17:45:50 +02:00
doAddComment ( event . getOwner ( ) , event . getText ( ) , event . getMentionedUsers ( ) ) ;
2013-04-04 15:41:17 +02:00
}
} ) ;
eventBus . addHandler ( EditCommentEvent . TYPE , new EditCommentEventHandler ( ) {
@Override
public void onEditComment ( EditCommentEvent event ) {
2015-12-11 14:16:21 +01:00
doEditComment ( event . getOwner ( ) , event . getCommentInstance ( ) , event . getCommentPanel ( ) ) ;
2013-04-04 15:41:17 +02:00
}
} ) ;
2013-10-07 01:02:11 +02:00
eventBus . addHandler ( SelectedUserEvent . TYPE , new SelectedUserEventHandler ( ) {
@Override
public void onSelectedUser ( SelectedUserEvent event ) {
2016-04-06 16:35:20 +02:00
final String profilePageURL = GCubePortalConstants . PREFIX_GROUP_URL + ClientScopeHelper . extractOrgFriendlyURL ( Location . getHref ( ) ) + GCubePortalConstants . USER_PROFILE_FRIENDLY_URL ;
Location . assign ( profilePageURL + " ? " +
2014-03-10 16:47:02 +01:00
Encoder . encode ( GCubeSocialNetworking . USER_PROFILE_OID ) + " = " +
Encoder . encode ( event . getSelectedUser ( ) . getId ( ) ) ) ;
2013-10-07 01:02:11 +02:00
}
} ) ;
2014-03-10 16:47:02 +01:00
2013-04-04 15:41:17 +02:00
eventBus . addHandler ( SeeLikesEvent . TYPE , new SeeLikesEventHandler ( ) {
@Override
public void onSeeLikes ( SeeLikesEvent event ) {
doShowLikes ( event . getFeedId ( ) ) ;
}
} ) ;
eventBus . addHandler ( SeeCommentsEvent . TYPE , new SeeCommentsEventHandler ( ) {
@Override
public void onSeeComments ( SeeCommentsEvent event ) {
doShowComments ( event . getOwner ( ) , event . isCommentForm2Add ( ) ) ;
}
} ) ;
eventBus . addHandler ( DeleteCommentEvent . TYPE , new DeleteCommentEventHandler ( ) {
@Override
public void onDeleteComment ( DeleteCommentEvent event ) {
doDeleteComment ( event . getOwner ( ) , event . getCommentId ( ) ) ;
}
} ) ;
eventBus . addHandler ( DeleteFeedEvent . TYPE , new DeleteFeedEventHandler ( ) {
@Override
public void onDeleteFeed ( DeleteFeedEvent event ) {
doDeleteFeed ( event . getToDelete ( ) ) ;
}
} ) ;
2014-03-10 16:47:02 +01:00
2013-07-11 12:19:36 +02:00
eventBus . addHandler ( OpenFeedEvent . TYPE , new OpenFeedEventHandler ( ) {
@Override
public void onOpenFeed ( OpenFeedEvent event ) {
doShowFeed ( event . getToShow ( ) ) ;
}
} ) ;
2013-04-04 15:41:17 +02:00
}
/ * *
*
* /
public NewsFeedPanel ( ) {
bind ( ) ;
2016-04-28 19:07:12 +02:00
mainPanel . setWidth ( " 100% " ) ;
2013-04-19 15:38:20 +02:00
mainPanel . add ( filterPanelWrapper ) ;
filterPanelWrapper . setVisible ( false ) ;
2013-04-05 16:16:07 +02:00
mainPanel . add ( newUpdatesPanel ) ;
2013-04-04 15:41:17 +02:00
mainPanel . add ( newsPanel ) ;
2013-04-19 15:38:20 +02:00
filterPanel = new FilterPanel ( this , newsService ) ;
filterPanelWrapper . add ( filterPanel ) ;
2013-04-04 15:41:17 +02:00
initWidget ( mainPanel ) ;
newsPanel . clear ( ) ;
newsPanel . setWidth ( " 100% " ) ;
2016-05-05 19:07:36 +02:00
showMoreUpdatesPanel . setWidth ( " 60% " ) ;
2013-04-04 15:41:17 +02:00
newsPanel . setHeight ( " 300px " ) ;
newsPanel . setHorizontalAlignment ( HasAlignment . ALIGN_CENTER ) ;
newsPanel . setVerticalAlignment ( HasVerticalAlignment . ALIGN_TOP ) ;
loadingImage = new Image ( loading ) ;
2015-05-06 17:34:45 +02:00
newsPanel . add ( loadingIcon ) ;
2014-09-10 14:41:37 +02:00
CheckSession . getInstance ( ) . startPolling ( ) ;
2016-02-15 15:37:58 +01:00
isSearch = false ;
2016-08-03 16:29:59 +02:00
isFeedsRelatedToStatistics = false ;
2014-10-07 16:41:08 +02:00
2013-04-04 17:29:51 +02:00
newsService . getUserSettings ( new AsyncCallback < UserSettings > ( ) {
2013-04-04 15:41:17 +02:00
@Override
public void onFailure ( Throwable caught ) {
}
@Override
2013-04-04 17:29:51 +02:00
public void onSuccess ( UserSettings result ) {
myUserInfo = result . getUserInfo ( ) ;
2014-02-13 10:17:48 +01:00
delayMillis = result . getRefreshingTimeInMillis ( ) ;
2014-03-10 16:47:02 +01:00
vreLabel = result . getVreLabel ( ) ;
2014-04-01 19:09:26 +02:00
currentScope = result . getCurrentScope ( ) ;
2015-10-12 16:33:04 +02:00
if ( result . getUserInfo ( ) . getUsername ( ) . equals ( NewsConstants . TEST_USER ) ) {
2014-04-01 19:09:26 +02:00
doStopFeedsTimer ( ) ;
2014-04-02 15:29:51 +02:00
doShowSessionExpired ( ) ;
2013-04-04 15:41:17 +02:00
}
else {
2014-10-07 16:41:08 +02:00
GWT . log ( " checking params " ) ;
2013-04-19 14:24:54 +02:00
if ( getFeedToShowId ( ) ! = null ) {
String feedKey = getFeedToShowId ( ) ;
showSingleFeed ( feedKey ) ;
2013-04-19 15:38:20 +02:00
filterPanel . removeFilterSelected ( ) ;
2014-10-07 16:41:08 +02:00
}
else if ( getHashtagParam ( ) ! = null ) {
2014-10-13 15:44:46 +02:00
String hashtag = " " ;
try {
2014-10-13 16:27:12 +02:00
hashtag = Encoder . decode ( getHashtagParam ( ) ) ;
2014-10-13 15:44:46 +02:00
} catch ( Exception e ) {
newsPanel . clear ( ) ;
newsPanel . add ( new HTML ( " <div class= \" nofeed-message \" ><div style= \" padding-top: 90px; \" > " +
" We're sorry, it seems you used an invalid character, please check the hashtag</div> " ) ) ;
return ;
}
2014-10-07 16:41:08 +02:00
showFeedsByHashtag ( hashtag ) ;
filterPanel . removeFilterSelected ( ) ;
2016-02-12 18:35:11 +01:00
}
else if ( getSearchParam ( ) ! = null ) {
String query = " " ;
try {
query = Encoder . decode ( getSearchParam ( ) ) ;
2016-02-15 15:37:58 +01:00
currentQuery = query ;
2016-02-12 18:35:11 +01:00
} catch ( Exception e ) {
newsPanel . clear ( ) ;
newsPanel . add ( new HTML ( " <div class= \" nofeed-message \" ><div style= \" padding-top: 90px; \" > " +
" We're sorry, it seems you used an invalid character, please check the query</div> " ) ) ;
return ;
}
// show
2016-02-15 15:37:58 +01:00
isSearch = true ;
2016-02-12 18:35:11 +01:00
showFeedsSearch ( query , 0 , SEARCHED_FEEDS_TO_SHOW ) ;
filterPanel . removeFilterSelected ( ) ;
2016-08-03 16:29:59 +02:00
} else if ( getShowUserStatisticParam ( ) ! = null ) {
String action = " " ;
try {
action = Encoder . decode ( getShowUserStatisticParam ( ) ) ;
relatedFeedsToUserStatisticsToShow = ShowUserStatisticAction . valueOf ( action ) ;
} catch ( Exception e ) {
newsPanel . clear ( ) ;
newsPanel . add ( new HTML ( " <div class= \" nofeed-message \" ><div style= \" padding-top: 90px; \" > " +
" We're sorry, it seems you used an invalid character</div> " ) ) ;
return ;
}
isFeedsRelatedToStatistics = true ;
showUserStatisticsRelatedFeeds ( relatedFeedsToUserStatisticsToShow , 0 , FEEDS_RELATED_TO_USER_STATISTICS_TO_SHOW ) ;
filterPanel . removeFilterSelected ( ) ;
}
2014-10-07 16:41:08 +02:00
else {
2013-04-19 14:24:54 +02:00
showAllUpdatesFeeds ( ) ;
}
2013-04-04 15:41:17 +02:00
currentFilter = FilterType . ALL_UPDATES ;
}
2013-04-11 12:58:50 +02:00
//adjustments in the UI Depending on the scope
2014-03-10 16:47:02 +01:00
if ( result . isInfrastructure ( ) ) {
2016-08-30 17:11:46 +02:00
//filterPanelWrapper.setVisible(getFeedToShowId() == null);
2014-03-10 16:47:02 +01:00
showFeedTimelineSource = result . isShowTimelineSourceLabel ( ) ;
isInfrastructure = true ;
}
2016-02-12 18:35:11 +01:00
}
2013-04-04 15:41:17 +02:00
} ) ;
2013-04-05 16:16:07 +02:00
2013-04-04 15:41:17 +02:00
feedsTimer = new Timer ( ) {
@Override
public void run ( ) {
2013-04-05 16:16:07 +02:00
checkForNewUpdates ( ) ;
2013-04-04 15:41:17 +02:00
}
} ;
feedsTimer . scheduleRepeating ( delayMillis ) ;
2014-04-02 01:01:27 +02:00
//this is for the automatic scroll of feeds
Window . addWindowScrollHandler ( new ScrollHandler ( ) {
@Override
public void onWindowScroll ( ScrollEvent event ) {
boolean isInView = isScrolledIntoView ( showMoreWidget ) ;
if ( isInView ) {
eventBus . fireEvent ( new ShowMoreUpdatesEvent ( ) ) ;
}
}
} ) ;
2014-04-01 19:09:26 +02:00
}
2014-04-02 01:01:27 +02:00
2014-04-01 19:09:26 +02:00
/ * *
* stop the feeds timer ( when session expires )
* /
private void doStopFeedsTimer ( ) {
feedsTimer . cancel ( ) ;
2013-04-04 15:41:17 +02:00
}
/ * *
*
* /
2013-04-05 16:16:07 +02:00
private void checkForNewUpdates ( ) {
2013-04-04 15:41:17 +02:00
switch ( currentFilter ) {
case ALL_UPDATES :
2013-04-05 16:16:07 +02:00
checkAllUpdatesFeeds ( ) ;
2013-04-04 15:41:17 +02:00
break ;
case CONNECTIONS :
showOnlyConnectionsFeeds ( ) ;
break ;
case MINE :
showOnlyMyFeeds ( ) ;
break ;
2014-04-02 01:01:27 +02:00
default :
break ;
2013-04-04 15:41:17 +02:00
}
}
2013-04-19 14:24:54 +02:00
/ * *
* check if it has to show just one feed
* @return
* /
private String getFeedToShowId ( ) {
return Window . Location . getParameter ( GET_OID_PARAMETER ) ;
}
2014-10-07 16:41:08 +02:00
/ * *
* check if it has to show the feeds given an hashtag
* @return
* /
private String getHashtagParam ( ) {
return Window . Location . getParameter ( Encoder . encode ( GCubeSocialNetworking . HASHTAG_OID ) ) ;
}
2016-02-15 15:37:58 +01:00
2016-08-03 16:29:59 +02:00
/ * *
* Check if some user statistic related feeds must be shown
* @return
* /
private String getShowUserStatisticParam ( ) {
return Window . Location . getParameter ( Encoder . encode ( GCubeSocialNetworking . SHOW_STATISTICS_ACTION_OID ) ) ;
}
2016-02-12 18:35:11 +01:00
/ * *
* check if it has to show the feeds given a query
* @return
* /
private String getSearchParam ( ) {
return Window . Location . getParameter ( Encoder . encode ( GCubeSocialNetworking . SEARCH_OID ) ) ;
}
2016-02-15 15:37:58 +01:00
2014-04-01 19:09:26 +02:00
/ * *
* used from notification referrals ( see this Post )
* @param feedKey
* /
2013-04-19 14:24:54 +02:00
private void showSingleFeed ( String feedKey ) {
newsPanel . clear ( ) ;
newsService . getSingleFeed ( feedKey , new AsyncCallback < EnhancedFeed > ( ) {
@Override
public void onSuccess ( EnhancedFeed result ) {
2013-04-19 15:38:20 +02:00
if ( result . getFeed ( ) . getType ( ) = = FeedType . DISABLED ) {
2016-04-06 16:35:20 +02:00
final String profilePageURL = GCubePortalConstants . PREFIX_GROUP_URL + ClientScopeHelper . extractOrgFriendlyURL ( Location . getHref ( ) ) + GCubePortalConstants . USER_PROFILE_FRIENDLY_URL ;
String usrLink = " <a class= \" link \" href= \" " + profilePageURL + " ? " +
2014-04-02 18:56:17 +02:00
Encoder . encode ( GCubeSocialNetworking . USER_PROFILE_OID ) + " = " +
Encoder . encode ( result . getFeed ( ) . getEntityId ( ) ) + " \" > " + result . getFeed ( ) . getFullName ( ) +
" </a> " ;
2013-04-19 15:38:20 +02:00
newsPanel . add ( new HTML ( " <div class= \" nofeed-message \" ><div style= \" padding-top: 90px; \" > " +
" We're sorry, " + usrLink + " removed the post in the meantime!</div></div> " ) ) ;
2014-11-04 23:24:32 +01:00
} else {
2016-05-16 19:29:09 +02:00
mainPanel . setHorizontalAlignment ( HasAlignment . ALIGN_LEFT ) ;
2013-04-19 15:38:20 +02:00
newsPanel . setHorizontalAlignment ( HasAlignment . ALIGN_LEFT ) ;
newsPanel . setVerticalAlignment ( HasVerticalAlignment . ALIGN_TOP ) ;
2016-05-16 19:29:09 +02:00
newsPanel . add ( new ResultsFor ( " selected post " , " " ) ) ;
newsPanel . setHeight ( " " ) ;
2014-03-10 16:47:02 +01:00
newsPanel . add ( new TweetTemplate ( true , true , myUserInfo , result , eventBus ) ) ;
2013-04-19 15:38:20 +02:00
}
2013-04-19 14:24:54 +02:00
newsPanel . add ( new Image ( spacer ) ) ;
}
@Override
public void onFailure ( Throwable caught ) {
showProblems ( ) ;
}
} ) ;
}
2013-04-08 19:20:48 +02:00
/ * *
* check for updates
* /
2014-04-01 19:09:26 +02:00
private void checkAllUpdatesFeeds ( ) {
newsService . getUserSettings ( new AsyncCallback < UserSettings > ( ) {
2013-04-05 16:16:07 +02:00
@Override
2014-04-01 19:09:26 +02:00
public void onFailure ( Throwable caught ) {
doStopFeedsTimer ( ) ;
2013-04-05 16:16:07 +02:00
}
@Override
2014-04-01 19:09:26 +02:00
public void onSuccess ( UserSettings result ) {
2015-10-12 16:33:04 +02:00
if ( result . getUserInfo ( ) . getUsername ( ) . equals ( NewsConstants . TEST_USER ) ) {
2014-04-01 19:09:26 +02:00
doStopFeedsTimer ( ) ;
2014-04-02 15:29:51 +02:00
doShowSessionExpired ( ) ;
2014-04-01 19:09:26 +02:00
}
/ * *
* this check avoids the 2 tabs open in 2 different scope , if the previous tab was open at VRE Level and then antoher
* is open at infra level the first tab stops checking for updates
* /
if ( result . getCurrentScope ( ) . compareTo ( currentScope ) = = 0 ) {
2014-04-08 23:40:13 +02:00
newsService . getAllUpdateUserFeeds ( NewsConstants . FEEDS_NO_PER_CATEGORY , new AsyncCallback < ArrayList < EnhancedFeed > > ( ) {
2014-04-01 19:09:26 +02:00
@Override
public void onSuccess ( ArrayList < EnhancedFeed > feeds ) {
if ( feeds ! = null & & allUpdates . size ( ) > 0 ) {
Date myLastUpdateTime = allUpdates . get ( 0 ) . getFeed ( ) . getTime ( ) ; //this is the last update in the View
GWT . log ( " Last Mine: " + allUpdates . get ( 0 ) . getFeed ( ) . getDescription ( ) ) ;
GWT . log ( " Last Retr.: " + feeds . get ( 0 ) . getFeed ( ) . getDescription ( ) ) ;
tempCacheNewUpdates = new ArrayList < EnhancedFeed > ( ) ; //need to clear it everytime i check (in case someone deleted the updated in the meanwhile)
//check if there are new updates (enter the while) and put them in a temporary cache for displaying on user click
int i = 0 ;
while ( i < feeds . size ( ) & & feeds . get ( i ) . getFeed ( ) . getTime ( ) . after ( myLastUpdateTime ) ) {
tempCacheNewUpdates . add ( feeds . get ( i ) ) ;
i + + ;
}
/ * currNewUpdatesNo keeps the number of updates to be added on user clicks ,
* i keeps the total number as it arrives ,
* if they differ you got to refresh the updates to show the new number
* /
if ( currNewUpdatesNo < i ) {
//add the current "show new updates" alert panel if not present
if ( newsFeedAlert = = null ) {
newsFeedAlert = new NewFeedsAvailable ( i , eventBus ) ;
newUpdatesPanel . add ( newsFeedAlert ) ;
}
else //update it otherwise
newsFeedAlert . updateNewUpdatesNo ( i ) ;
currNewUpdatesNo = i ;
}
}
}
@Override
public void onFailure ( Throwable caught ) { }
} ) ;
}
}
} ) ;
2013-04-05 16:16:07 +02:00
}
2014-10-07 16:41:08 +02:00
/ * *
* get the hashtagged feeds
* @param hashtag to look for
* /
private void showFeedsByHashtag ( final String hashtag ) {
showLoader ( ) ;
newsService . getUserSettings ( new AsyncCallback < UserSettings > ( ) {
@Override
public void onFailure ( Throwable caught ) {
doStopFeedsTimer ( ) ;
}
@Override
public void onSuccess ( UserSettings result ) {
2015-10-12 16:33:04 +02:00
if ( result . getUserInfo ( ) . getUsername ( ) . equals ( NewsConstants . TEST_USER ) ) {
2014-10-07 16:41:08 +02:00
doStopFeedsTimer ( ) ;
doShowSessionExpired ( ) ;
} else {
/ * *
* this check avoids the 2 tabs open in 2 different scope , if the previous tab was open at VRE Level and then antoher
* is open at infra level the first tab stops checking for updates
* /
if ( result . getCurrentScope ( ) . compareTo ( currentScope ) = = 0 ) {
newsService . getFeedsByHashtag ( hashtag , new AsyncCallback < ArrayList < EnhancedFeed > > ( ) {
@Override
public void onSuccess ( ArrayList < EnhancedFeed > feeds ) {
filterPanelWrapper . setVisible ( false ) ;
newsPanel . clear ( ) ;
if ( feeds ! = null ) {
if ( feeds . size ( ) = = 0 ) {
2014-10-08 23:15:42 +02:00
newsPanel . add ( new ResultsFor ( " results for " , hashtag ) ) ;
2014-10-07 16:41:08 +02:00
newsPanel . add ( new HTML ( " <div class= \" nofeed-message \" style= \" height: 200px; \" > " +
" Sorry, looks like we found no updates with topic: " + hashtag + " </div> " ) ) ;
isFirstTweet = true ;
}
else {
newsPanel . setHeight ( " " ) ;
newsPanel . setHorizontalAlignment ( HasAlignment . ALIGN_LEFT ) ;
newsPanel . setVerticalAlignment ( HasVerticalAlignment . ALIGN_TOP ) ;
2014-10-08 23:15:42 +02:00
newsPanel . add ( new ResultsFor ( " results for " , hashtag ) ) ;
2014-10-07 16:41:08 +02:00
for ( EnhancedFeed feed : feeds ) {
newsPanel . add ( new TweetTemplate ( false , showFeedTimelineSource , myUserInfo , feed , eventBus ) ) ; //in the view
}
if ( feeds . size ( ) < 5 ) {
newsPanel . add ( new Image ( spacer ) ) ;
}
isFirstTweet = false ;
}
} else {
showProblems ( ) ;
}
}
@Override
public void onFailure ( Throwable caught ) {
showProblems ( ) ;
}
} ) ;
}
}
}
} ) ;
}
2016-02-15 15:37:58 +01:00
2016-08-03 16:29:59 +02:00
/ * *
* Called when a user wants to show some feeds related to her statistics
* /
private void showUserStatisticsRelatedFeeds ( final ShowUserStatisticAction relatedFeedsToUserStatisticsToShow , final int from , final int to ) {
// show loader while waiting
showLoader ( ) ;
// stop asking for feeds
doStopFeedsTimer ( ) ;
final String actionToPrint = relatedFeedsToUserStatisticsToShow . getHumanFriendlyAction ( ) ;
newsService . getUserSettings ( new AsyncCallback < UserSettings > ( ) {
@Override
public void onFailure ( Throwable caught ) {
}
@Override
public void onSuccess ( UserSettings result ) {
if ( result . getUserInfo ( ) . getUsername ( ) . equals ( NewsConstants . TEST_USER ) ) {
doShowSessionExpired ( ) ;
} else {
/ * *
* this check avoids the 2 tabs open in 2 different scope , if the previous tab was open at VRE Level and then antoher
* is open at infra level the first tab stops checking for updates
* /
if ( result . getCurrentScope ( ) . compareTo ( currentScope ) = = 0 ) {
newsService . getFeedsRelatedToUserStatistics ( relatedFeedsToUserStatisticsToShow , from , to , new AsyncCallback < ArrayList < EnhancedFeed > > ( ) {
@Override
public void onSuccess ( ArrayList < EnhancedFeed > feeds ) {
filterPanelWrapper . setVisible ( false ) ;
newsPanel . clear ( ) ;
if ( feeds ! = null ) {
GWT . log ( " Retrieved " + feeds . size ( ) + " hits for search. " ) ;
if ( feeds . size ( ) = = 0 ) {
2016-08-30 17:11:46 +02:00
newsPanel . add ( new ResultsFor ( " " , actionToPrint ) ) ;
2016-08-03 16:29:59 +02:00
newsPanel . add ( new HTML ( " <div class= \" nofeed-message \" style= \" height: 200px; \" > " +
" Sorry, looks like we found no match for action : " + actionToPrint + " </div> " ) ) ;
}
else {
newsPanel . setHeight ( " " ) ;
newsPanel . setHorizontalAlignment ( HasAlignment . ALIGN_LEFT ) ;
newsPanel . setVerticalAlignment ( HasVerticalAlignment . ALIGN_TOP ) ;
2016-08-30 17:11:46 +02:00
newsPanel . add ( new ResultsFor ( " " , actionToPrint ) ) ;
2016-08-03 16:29:59 +02:00
for ( EnhancedFeed feed : feeds ) {
newsPanel . add ( new TweetTemplate ( false , showFeedTimelineSource , myUserInfo , feed , eventBus ) ) ; //in the view
// save them (they will be used when asking more feeds)
allUpdates . add ( feed ) ;
}
if ( feeds . size ( ) < 5 ) {
newsPanel . add ( new Image ( spacer ) ) ;
}
// add widget to lookup more feeds: if the size of the returned data is less
// than the required disable this feature.
if ( feeds . size ( ) = = FEEDS_RELATED_TO_USER_STATISTICS_TO_SHOW ) {
showMoreWidget = new ShowMoreFeeds ( eventBus ) ;
showMoreUpdatesPanel . add ( showMoreWidget ) ;
newsPanel . add ( showMoreUpdatesPanel ) ;
}
}
} else {
showProblems ( ) ;
}
}
@Override
public void onFailure ( Throwable caught ) {
showProblems ( ) ;
}
} ) ;
}
}
}
} ) ;
}
2016-02-12 18:35:11 +01:00
/ * *
* Called when a user search something
* /
private void showFeedsSearch ( final String query , final int from , final int to ) {
2016-02-15 15:37:58 +01:00
// show loader while waiting
2016-02-12 18:35:11 +01:00
showLoader ( ) ;
2016-02-15 15:37:58 +01:00
// stop asking for feeds
doStopFeedsTimer ( ) ;
2016-08-03 16:29:59 +02:00
2016-02-12 18:35:11 +01:00
newsService . getUserSettings ( new AsyncCallback < UserSettings > ( ) {
@Override
public void onFailure ( Throwable caught ) {
}
@Override
public void onSuccess ( UserSettings result ) {
if ( result . getUserInfo ( ) . getUsername ( ) . equals ( NewsConstants . TEST_USER ) ) {
doShowSessionExpired ( ) ;
} else {
/ * *
* this check avoids the 2 tabs open in 2 different scope , if the previous tab was open at VRE Level and then antoher
* is open at infra level the first tab stops checking for updates
* /
if ( result . getCurrentScope ( ) . compareTo ( currentScope ) = = 0 ) {
newsService . getFeedsByQuery ( query , from , to , new AsyncCallback < ArrayList < EnhancedFeed > > ( ) {
@Override
public void onSuccess ( ArrayList < EnhancedFeed > feeds ) {
filterPanelWrapper . setVisible ( false ) ;
newsPanel . clear ( ) ;
if ( feeds ! = null ) {
2016-02-15 15:37:58 +01:00
GWT . log ( " Retrieved " + feeds . size ( ) + " hits for search. " ) ;
2016-02-12 18:35:11 +01:00
if ( feeds . size ( ) = = 0 ) {
2016-08-30 17:11:46 +02:00
newsPanel . add ( new ResultsFor ( " Results for query " , query ) ) ;
2016-02-12 18:35:11 +01:00
newsPanel . add ( new HTML ( " <div class= \" nofeed-message \" style= \" height: 200px; \" > " +
2016-02-13 18:14:05 +01:00
" Sorry, looks like we found no match for: " + query + " </div> " ) ) ;
2016-02-12 18:35:11 +01:00
}
else {
newsPanel . setHeight ( " " ) ;
newsPanel . setHorizontalAlignment ( HasAlignment . ALIGN_LEFT ) ;
newsPanel . setVerticalAlignment ( HasVerticalAlignment . ALIGN_TOP ) ;
2016-08-30 17:11:46 +02:00
newsPanel . add ( new ResultsFor ( " Results for query " , query ) ) ;
2016-02-12 18:35:11 +01:00
for ( EnhancedFeed feed : feeds ) {
newsPanel . add ( new TweetTemplate ( false , showFeedTimelineSource , myUserInfo , feed , eventBus ) ) ; //in the view
2016-02-15 15:37:58 +01:00
// save them (they will be used when asking more feeds)
allUpdates . add ( feed ) ;
2016-02-12 18:35:11 +01:00
}
if ( feeds . size ( ) < 5 ) {
newsPanel . add ( new Image ( spacer ) ) ;
2016-02-15 15:37:58 +01:00
}
// add widget to lookup more feeds: if the size of the returned data is less
// than the required disable this feature.
if ( feeds . size ( ) = = SEARCHED_FEEDS_TO_SHOW ) {
showMoreWidget = new ShowMoreFeeds ( eventBus ) ;
showMoreUpdatesPanel . add ( showMoreWidget ) ;
newsPanel . add ( showMoreUpdatesPanel ) ;
}
2016-02-12 18:35:11 +01:00
}
} else {
showProblems ( ) ;
}
}
@Override
public void onFailure ( Throwable caught ) {
showProblems ( ) ;
}
} ) ;
}
}
}
} ) ;
}
2014-03-11 19:29:39 +01:00
2013-04-10 11:49:04 +02:00
/ * *
* called when a user click on the are new updates
* /
2013-04-08 17:25:37 +02:00
protected void doShowCachedNewUpdates ( ) {
2013-04-09 17:35:23 +02:00
newUpdatesPanel . clear ( ) ; //remove the alert panel
newsFeedAlert = null ; //reset the alert panel and other needed vars
currNewUpdatesNo = 0 ;
2013-04-11 12:58:50 +02:00
2013-04-10 11:49:04 +02:00
//need to put them in reverse order;
2013-04-09 17:35:23 +02:00
for ( int i = tempCacheNewUpdates . size ( ) ; i > 0 ; i - - ) {
EnhancedFeed feed = tempCacheNewUpdates . get ( i - 1 ) ;
2013-04-08 17:25:37 +02:00
final TweetTemplate tt = new TweetTemplate ( myUserInfo , feed , eventBus , true ) ;
newsPanel . insert ( tt , 0 ) ; //insert in the view
allUpdates . add ( 0 , feed ) ; //insert in the model
2016-01-28 15:28:06 +01:00
2013-04-08 17:25:37 +02:00
//timer for the transition
Timer t = new Timer ( ) {
@Override
public void run ( ) {
tt . setcontentAreaStyle ( " visible " ) ;
2016-01-28 15:28:06 +01:00
// alert the user-statistics portlet to update statistics in case
// one or more feed belongs to user himself
if ( tt . isUser ( ) ) {
try {
2016-02-15 15:37:58 +01:00
2016-01-28 15:28:06 +01:00
NewsFeed . pageBusAdapter . PageBusPublish ( PageBusEvents . postIncrement , " " , Defaults . STRING_JSONIZER ) ;
int numComments = tt . numberOfComments ( ) ;
int numLikes = tt . numberOfLikes ( ) ;
for ( int i = 0 ; i < numComments ; i + + )
NewsFeed . pageBusAdapter . PageBusPublish ( PageBusEvents . commentsIncrement , " " , Defaults . STRING_JSONIZER ) ;
for ( int i = 0 ; i < numLikes ; i + + )
NewsFeed . pageBusAdapter . PageBusPublish ( PageBusEvents . likesIncrement , " " , Defaults . STRING_JSONIZER ) ;
} catch ( PageBusAdapterException ex ) {
GWT . log ( ex . toString ( ) ) ;
}
}
2013-04-08 17:25:37 +02:00
}
} ;
t . schedule ( 100 ) ;
}
2013-04-10 11:49:04 +02:00
//after that I remove the ($updatesNo) from Window Title
String currTitle = Document . get ( ) . getTitle ( ) ;
Document . get ( ) . setTitle ( currTitle . startsWith ( " ( " ) ? currTitle . substring ( 4 ) : currTitle ) ;
2013-04-08 17:25:37 +02:00
}
2013-04-11 12:58:50 +02:00
2013-04-09 17:35:23 +02:00
/ * *
2016-01-20 18:49:31 +01:00
* used when adding directly a feed from the UI ( IPC )
2013-04-09 17:35:23 +02:00
* @param userid
* @param fullName
* @param thumbURL
* @param description
* /
public void addJustAddedFeed ( ClientFeed cFeed ) {
2016-01-19 14:35:27 +01:00
2016-01-20 18:49:31 +01:00
// build up the feed
Feed feed = new Feed (
cFeed . getKey ( ) ,
2016-01-19 14:35:27 +01:00
FeedType . SHARE ,
cFeed . getUserid ( ) ,
cFeed . getTime ( ) ,
" " ,
cFeed . getUri ( ) ,
cFeed . getLinkUrlThumbnail ( ) ,
cFeed . getDescription ( ) ,
PrivacyLevel . CONNECTION ,
cFeed . getFullName ( ) ,
cFeed . getEmail ( ) ,
cFeed . getThumbnailURL ( ) ,
cFeed . getLinkTitle ( ) ,
cFeed . getLinkDescription ( ) ,
cFeed . getLinkHost ( ) ) ;
2016-01-20 18:49:31 +01:00
// set multi-attachments property
2016-01-19 14:35:27 +01:00
boolean multiAttachments = cFeed . getAttachments ( ) ! = null ;
feed . setMultiFileUpload ( multiAttachments ) ;
2016-01-20 18:49:31 +01:00
//false because he could not have liked this yet and true because is the current user's
EnhancedFeed toAdd = new EnhancedFeed ( feed , false , true ) ;
2013-04-09 17:35:23 +02:00
2016-01-19 14:35:27 +01:00
// be careful when converting from List<> to ArrayList<> ...
2016-01-20 18:49:31 +01:00
ArrayList < Attachment > attachments = multiAttachments ? new ArrayList < Attachment > ( cFeed . getAttachments ( ) ) : null ;
2016-01-19 14:35:27 +01:00
toAdd . setAttachments ( attachments ) ;
2016-01-20 18:49:31 +01:00
// build up the post template
2013-04-09 17:35:23 +02:00
final TweetTemplate tt = new TweetTemplate ( myUserInfo , toAdd , eventBus , true ) ;
if ( isFirstTweet ) {
newsPanel . clear ( ) ;
newsPanel . add ( new Image ( spacer ) ) ;
isFirstTweet = false ;
}
newsPanel . insert ( tt , 0 ) ;
2016-01-19 14:35:27 +01:00
2013-04-09 17:35:23 +02:00
Timer t = new Timer ( ) {
@Override
public void run ( ) {
tt . setcontentAreaStyle ( " visible " ) ;
}
} ;
2016-01-20 18:49:31 +01:00
// show after half a second
2013-04-09 17:35:23 +02:00
t . schedule ( 500 ) ;
2013-04-11 12:58:50 +02:00
2013-04-09 17:35:23 +02:00
//insert it also in the model so that the user who created it do not get notified about this new update
2016-01-20 18:49:31 +01:00
allUpdates . add ( 0 , toAdd ) ;
2016-01-25 18:49:31 +01:00
2013-04-09 17:35:23 +02:00
}
2013-04-05 16:16:07 +02:00
2013-04-04 15:41:17 +02:00
/ * *
* All Updates
* /
public void showAllUpdatesFeeds ( ) {
showLoader ( ) ;
2014-04-08 23:40:13 +02:00
newsService . getAllUpdateUserFeeds ( NewsConstants . FEEDS_NO_PER_CATEGORY , new AsyncCallback < ArrayList < EnhancedFeed > > ( ) {
2013-04-04 15:41:17 +02:00
@Override
public void onSuccess ( ArrayList < EnhancedFeed > feeds ) {
newsPanel . clear ( ) ;
if ( feeds ! = null ) {
if ( feeds . size ( ) = = 0 ) {
2014-03-10 16:47:02 +01:00
if ( ! isInfrastructure ) {
newsPanel . add ( new HTML ( " <div class= \" nofeed-message \" > " +
" Sorry, looks like nobody shared anything yet. <br> " +
" You may begin by sharing a news!</div> " ) ) ;
} else {
newsPanel . add ( new HTML ( " <div class= \" nofeed-message \" > " +
" Sorry, looks like we've got nothing for you at the moment. <br> " +
2016-04-06 16:35:20 +02:00
" You may begin by joining some of the available " +
2014-03-10 16:47:02 +01:00
" <br> " + vreLabel + " s.</div> " ) ) ;
}
2013-04-04 15:41:17 +02:00
isFirstTweet = true ;
}
else {
newsPanel . setHeight ( " " ) ;
newsPanel . setHorizontalAlignment ( HasAlignment . ALIGN_LEFT ) ;
newsPanel . setVerticalAlignment ( HasVerticalAlignment . ALIGN_TOP ) ;
2016-08-03 16:29:59 +02:00
2013-04-05 16:16:07 +02:00
for ( EnhancedFeed feed : feeds ) {
2014-03-11 19:29:39 +01:00
newsPanel . add ( new TweetTemplate ( false , showFeedTimelineSource , myUserInfo , feed , eventBus ) ) ; //in the view
allUpdates . add ( feed ) ; //in the model
2013-04-05 16:16:07 +02:00
}
2013-04-04 15:41:17 +02:00
if ( feeds . size ( ) < 5 ) {
newsPanel . add ( new Image ( spacer ) ) ;
2014-03-11 19:29:39 +01:00
}
2014-04-08 23:40:13 +02:00
//if you are showing more than feedsMaxPerCategory-1 feeds there is probably more
if ( feeds . size ( ) > = NewsConstants . FEEDS_MAX_PER_CATEGORY - 1 & & ( ! isInfrastructure ) ) {
GWT . log ( " Show MORE " + NewsConstants . FEEDS_NO_PER_CATEGORY ) ;
2014-04-02 01:01:27 +02:00
showMoreWidget = new ShowMoreFeeds ( eventBus ) ;
showMoreUpdatesPanel . add ( showMoreWidget ) ;
2014-03-11 19:29:39 +01:00
newsPanel . add ( showMoreUpdatesPanel ) ;
2013-04-19 14:24:54 +02:00
}
2013-04-04 15:41:17 +02:00
isFirstTweet = false ;
}
} else {
showProblems ( ) ;
}
}
@Override
public void onFailure ( Throwable caught ) {
newsPanel . clear ( ) ;
newsPanel . add ( new HTML ( " <div class= \" nofeed-message \" > " +
" Ops! There were problems while retrieving your feeds!. <br> " +
" Please try again in a short while.</div> " ) ) ;
}
} ) ;
}
2014-03-11 19:29:39 +01:00
/ * *
2014-04-02 18:02:20 +02:00
* called when a user scroll down the page to the bottom
2014-03-11 19:29:39 +01:00
* /
2014-03-13 16:07:35 +01:00
protected void doShowMoreUpdates ( ) {
2016-02-15 15:37:58 +01:00
2014-03-13 16:07:35 +01:00
showMoreUpdatesPanel . remove ( 0 ) ;
2014-04-02 01:01:27 +02:00
loadingImage . getElement ( ) . getStyle ( ) . setMargin ( 10 , Unit . PX ) ;
2015-05-06 17:34:45 +02:00
showMoreUpdatesPanel . add ( loadingIcon ) ;
2014-03-13 16:07:35 +01:00
2016-02-15 15:37:58 +01:00
if ( isSearch ) {
GWT . log ( " Going to request more feeds for this search " ) ;
// start position
int start = allUpdates . size ( ) ;
GWT . log ( " StartingPoint = " + start ) ;
newsService . getFeedsByQuery ( currentQuery , start , SEARCHED_FEEDS_TO_SHOW , new AsyncCallback < ArrayList < EnhancedFeed > > ( ) {
@Override
public void onSuccess ( ArrayList < EnhancedFeed > feeds ) {
newsPanel . remove ( showMoreUpdatesPanel ) ;
if ( feeds ! = null ) {
GWT . log ( " There are " + feeds . size ( ) + " more feeds " ) ;
for ( EnhancedFeed feed : feeds ) {
// avoid to insert same data
if ( ! isFeedPresent ( feed ) ) {
newsPanel . add ( new TweetTemplate ( false , showFeedTimelineSource , myUserInfo , feed , eventBus ) ) ; //in the view
allUpdates . add ( feed ) ;
}
2014-03-13 16:07:35 +01:00
}
2016-02-15 15:37:58 +01:00
// clear panel
2014-03-13 16:07:35 +01:00
showMoreUpdatesPanel . clear ( ) ;
2016-08-03 16:29:59 +02:00
2016-02-15 15:37:58 +01:00
// check if we can ask for other data
if ( feeds . size ( ) = = SEARCHED_FEEDS_TO_SHOW ) {
GWT . log ( " It seems there are no more feeds for this query. Stop asking further " ) ;
showMoreWidget = new ShowMoreFeeds ( eventBus ) ;
showMoreUpdatesPanel . add ( showMoreWidget ) ;
newsPanel . add ( showMoreUpdatesPanel ) ;
} else {
showMoreWidget = null ;
}
2014-03-11 19:29:39 +01:00
}
}
2016-02-15 15:37:58 +01:00
@Override
public void onFailure ( Throwable caught ) {
showMoreUpdatesPanel . clear ( ) ;
newsPanel . add ( new HTML ( " <div class= \" nofeed-message \" > " +
2016-08-03 16:29:59 +02:00
" Ops! There were problems while retrieving your feeds!. <br> " +
" Please try again in a short while.</div> " ) ) ;
}
} ) ;
} else if ( isFeedsRelatedToStatistics ) {
GWT . log ( " Going to request more feeds for this user's statisics " ) ;
// start position
int start = allUpdates . size ( ) ;
GWT . log ( " StartingPoint = " + start ) ;
newsService . getFeedsRelatedToUserStatistics ( relatedFeedsToUserStatisticsToShow , start , FEEDS_RELATED_TO_USER_STATISTICS_TO_SHOW , new AsyncCallback < ArrayList < EnhancedFeed > > ( ) {
@Override
public void onSuccess ( ArrayList < EnhancedFeed > feeds ) {
newsPanel . remove ( showMoreUpdatesPanel ) ;
if ( feeds ! = null ) {
GWT . log ( " There are " + feeds . size ( ) + " more feeds " ) ;
for ( EnhancedFeed feed : feeds ) {
// avoid to insert same data
if ( ! isFeedPresent ( feed ) ) {
newsPanel . add ( new TweetTemplate ( false , showFeedTimelineSource , myUserInfo , feed , eventBus ) ) ; //in the view
allUpdates . add ( feed ) ;
}
}
// clear panel
showMoreUpdatesPanel . clear ( ) ;
// check if we can ask for other data
if ( feeds . size ( ) = = FEEDS_RELATED_TO_USER_STATISTICS_TO_SHOW ) {
GWT . log ( " It seems there are no more feeds for this query. Stop asking further " ) ;
showMoreWidget = new ShowMoreFeeds ( eventBus ) ;
showMoreUpdatesPanel . add ( showMoreWidget ) ;
newsPanel . add ( showMoreUpdatesPanel ) ;
} else {
showMoreWidget = null ;
}
}
}
@Override
public void onFailure ( Throwable caught ) {
showMoreUpdatesPanel . clear ( ) ;
newsPanel . add ( new HTML ( " <div class= \" nofeed-message \" > " +
2016-02-15 15:37:58 +01:00
" Ops! There were problems while retrieving your feeds!. <br> " +
" Please try again in a short while.</div> " ) ) ;
}
} ) ;
}
else {
int from = ( fromStartingPoint = = null ) ? allUpdates . size ( ) + 1 : fromStartingPoint ;
final int quantity = 10 ;
GWT . log ( " StartingPoint = " + from ) ;
newsService . getMoreFeeds ( from , quantity , new AsyncCallback < MoreFeedsBean > ( ) {
@Override
public void onSuccess ( MoreFeedsBean rangeFeeds ) {
newsPanel . remove ( showMoreUpdatesPanel ) ;
if ( rangeFeeds . getFeeds ( ) ! = null ) {
fromStartingPoint = rangeFeeds . getLastReturnedFeedTimelineIndex ( ) ;
int c = 1 ;
for ( EnhancedFeed feed : rangeFeeds . getFeeds ( ) ) {
if ( ! isFeedPresent ( feed ) ) { //avoid possible duplicates
newsPanel . add ( new TweetTemplate ( false , showFeedTimelineSource , myUserInfo , feed , eventBus ) ) ; //in the view
allUpdates . add ( feed ) ; //in the model
}
c + + ;
}
if ( c > = quantity ) { //there could be more feeds
GWT . log ( " there could be more feeds " ) ;
showMoreUpdatesPanel . clear ( ) ;
showMoreWidget = new ShowMoreFeeds ( eventBus ) ;
showMoreUpdatesPanel . add ( showMoreWidget ) ;
newsPanel . add ( showMoreUpdatesPanel ) ;
}
}
}
@Override
public void onFailure ( Throwable caught ) {
showMoreUpdatesPanel . clear ( ) ;
newsPanel . add ( new HTML ( " <div class= \" nofeed-message \" > " +
" Ops! There were problems while retrieving your feeds!. <br> " +
" Please try again in a short while.</div> " ) ) ;
}
} ) ;
}
2014-03-11 19:29:39 +01:00
}
2014-04-02 01:01:27 +02:00
/ * *
* @param widget the widget to check
* @returnn true if the widget is in the visible part of the page
* /
private boolean isScrolledIntoView ( Widget widget ) {
if ( widget ! = null ) {
int docViewTop = Window . getScrollTop ( ) ;
int docViewBottom = docViewTop + Window . getClientHeight ( ) ;
int elemTop = widget . getAbsoluteTop ( ) ;
int elemBottom = elemTop + widget . getOffsetHeight ( ) ;
return ( ( elemBottom < = docViewBottom ) & & ( elemTop > = docViewTop ) ) ;
}
return false ;
}
2014-03-13 16:07:35 +01:00
private boolean isFeedPresent ( EnhancedFeed toCheck ) {
for ( EnhancedFeed feed : allUpdates ) {
if ( feed . getFeed ( ) . getKey ( ) . compareTo ( toCheck . getFeed ( ) . getKey ( ) ) = = 0 )
return true ;
}
return false ;
}
2013-04-04 15:41:17 +02:00
/ * *
* Only User Connections
* /
public void showOnlyConnectionsFeeds ( ) {
showLoader ( ) ;
newsService . getOnlyConnectionsUserFeeds ( new AsyncCallback < ArrayList < EnhancedFeed > > ( ) {
@Override
public void onSuccess ( ArrayList < EnhancedFeed > feeds ) {
if ( feeds ! = null ) {
newsPanel . clear ( ) ;
if ( feeds . size ( ) = = 0 ) {
//TODO: provide actual link for Making some friends
newsPanel . add ( new HTML ( " <div class= \" nofeed-message \" > " +
" Looks like we've got nothing for you at the moment. <br> " +
" You may begin by <strong>adding</strong> some friend!</div> " ) ) ;
isFirstTweet = true ;
}
else {
newsPanel . setHeight ( " " ) ;
newsPanel . setHorizontalAlignment ( HasAlignment . ALIGN_LEFT ) ;
newsPanel . setVerticalAlignment ( HasVerticalAlignment . ALIGN_TOP ) ;
for ( EnhancedFeed feed : feeds )
2014-03-10 16:47:02 +01:00
newsPanel . add ( new TweetTemplate ( false , false , myUserInfo , feed , eventBus ) ) ;
2013-04-04 15:41:17 +02:00
if ( feeds . size ( ) < 5 ) {
newsPanel . add ( new Image ( spacer ) ) ;
}
isFirstTweet = false ;
}
} else
showProblems ( ) ;
}
@Override
public void onFailure ( Throwable caught ) {
loadingImage . setUrl ( warning ) ;
newsPanel . add ( new HTML ( " Ops! There were problems while retrieving your feeds! Please try again in a short while " ) ) ;
}
} ) ;
}
/ * *
* Only User Feeds
* /
public void showOnlyMyFeeds ( ) {
showLoader ( ) ;
newsService . getOnlyMyUserFeeds ( new AsyncCallback < ArrayList < EnhancedFeed > > ( ) {
@Override
public void onSuccess ( ArrayList < EnhancedFeed > feeds ) {
if ( feeds ! = null ) {
newsPanel . clear ( ) ;
if ( feeds . size ( ) = = 0 ) {
newsPanel . add ( new HTML ( " <div class= \" nofeed-message \" > " +
" Looks like we've got nothing for you at the moment. <br> " +
" You may begin by <strong>sharing</strong> an update!</div> " ) ) ;
isFirstTweet = true ;
}
else {
newsPanel . setHeight ( " " ) ;
newsPanel . setHorizontalAlignment ( HasAlignment . ALIGN_LEFT ) ;
newsPanel . setVerticalAlignment ( HasVerticalAlignment . ALIGN_TOP ) ;
for ( EnhancedFeed feed : feeds )
2014-03-10 16:47:02 +01:00
newsPanel . add ( new TweetTemplate ( false , showFeedTimelineSource , myUserInfo , feed , eventBus ) ) ;
2013-04-04 15:41:17 +02:00
if ( feeds . size ( ) < 5 ) {
newsPanel . add ( new Image ( spacer ) ) ;
}
isFirstTweet = false ;
}
} else
showProblems ( ) ;
}
@Override
public void onFailure ( Throwable caught ) {
loadingImage . setUrl ( warning ) ;
newsPanel . add ( new HTML ( " Ops! There were problems while retrieving your feeds! Please try again in a short while " ) ) ;
}
} ) ;
}
/ * *
* Only User Liked Feeds
* /
public void showOnlyLikedFeeds ( ) {
showLoader ( ) ;
newsService . getOnlyLikedFeeds ( new AsyncCallback < ArrayList < EnhancedFeed > > ( ) {
@Override
public void onSuccess ( ArrayList < EnhancedFeed > feeds ) {
if ( feeds ! = null ) {
newsPanel . clear ( ) ;
if ( feeds . size ( ) = = 0 ) {
newsPanel . add ( new HTML ( " <div class= \" nofeed-message \" > " +
" Looks like we've got nothing for you at the moment. <br> " +
" Set an update as your <strong>favorite</strong> to see it here</div> " ) ) ;
isFirstTweet = true ;
}
else {
newsPanel . setHeight ( " " ) ;
newsPanel . setHorizontalAlignment ( HasAlignment . ALIGN_LEFT ) ;
newsPanel . setVerticalAlignment ( HasVerticalAlignment . ALIGN_TOP ) ;
for ( EnhancedFeed feed : feeds )
2014-03-10 16:47:02 +01:00
newsPanel . add ( new TweetTemplate ( false , showFeedTimelineSource , myUserInfo , feed , eventBus ) ) ;
2013-04-04 15:41:17 +02:00
if ( feeds . size ( ) < 5 ) {
newsPanel . add ( new Image ( spacer ) ) ;
}
isFirstTweet = false ;
}
} else
showProblems ( ) ;
}
@Override
public void onFailure ( Throwable caught ) {
loadingImage . setUrl ( warning ) ;
newsPanel . add ( new HTML ( " Ops! There were problems while retrieving your feeds! Please try again in a short while " ) ) ;
}
} ) ;
}
2013-04-05 16:16:07 +02:00
2013-04-04 15:41:17 +02:00
private void showLoader ( ) {
newsPanel . clear ( ) ;
newsPanel . setWidth ( " 100% " ) ;
newsPanel . setHeight ( " 300px " ) ;
newsPanel . setHorizontalAlignment ( HasAlignment . ALIGN_CENTER ) ;
newsPanel . setVerticalAlignment ( HasVerticalAlignment . ALIGN_MIDDLE ) ;
2015-07-15 18:47:28 +02:00
newsPanel . add ( new Image ( loading ) ) ;
2013-04-04 15:41:17 +02:00
}
2013-04-05 16:16:07 +02:00
2013-04-04 15:41:17 +02:00
private void showProblems ( ) {
newsPanel . clear ( ) ;
newsPanel . add ( new HTML ( " <div class= \" nofeed-message \" > " +
" Ops! There were problems while retrieving your feeds!. <br> " +
2013-04-04 17:29:51 +02:00
" Looks like we are not able to communicate with the infrastructure,<br> (or your session expired)<br> please try again in a short while or refresh the page.</div> " ) ) ;
2013-04-04 15:41:17 +02:00
}
private void doAddLike ( final TweetTemplate owner , final String feedId ) {
newsService . like ( feedId , owner . getMyFeedText ( ) , owner . getMyFeedUserId ( ) , new AsyncCallback < Boolean > ( ) {
@Override
public void onFailure ( Throwable caught ) { }
@Override
2014-07-18 16:57:40 +02:00
public void onSuccess ( Boolean result ) {
if ( ! result ) {
doShowSessionExpired ( ) ;
2016-01-28 15:28:06 +01:00
} else {
// alert the User statistics portlet to increment the number of likes got
if ( owner . isUser ( ) ) {
try {
NewsFeed . pageBusAdapter . PageBusPublish (
PageBusEvents . likesIncrement
, " "
, Defaults . STRING_JSONIZER ) ;
} catch ( PageBusAdapterException ex ) {
GWT . log ( ex . toString ( ) ) ;
}
}
2014-07-18 16:57:40 +02:00
}
}
2013-04-04 15:41:17 +02:00
} ) ;
}
2014-10-07 16:41:08 +02:00
2016-01-28 15:28:06 +01:00
protected void doUnLike ( final TweetTemplate owner , String feedId ) {
2014-04-08 23:40:13 +02:00
newsService . unlike ( feedId , owner . getMyFeedText ( ) , owner . getMyFeedUserId ( ) , new AsyncCallback < Boolean > ( ) {
@Override
public void onFailure ( Throwable caught ) { }
@Override
2014-07-18 16:57:40 +02:00
public void onSuccess ( Boolean result ) {
if ( ! result ) {
doShowSessionExpired ( ) ;
2016-01-28 15:28:06 +01:00
} else {
// alert the User statistics portlet to decrement the number of likes got
if ( owner . isUser ( ) ) {
try {
NewsFeed . pageBusAdapter . PageBusPublish (
PageBusEvents . likesDecrement
, " "
, Defaults . STRING_JSONIZER ) ;
} catch ( PageBusAdapterException ex ) {
GWT . log ( ex . toString ( ) ) ;
}
}
2014-07-18 16:57:40 +02:00
}
}
2014-04-08 23:40:13 +02:00
} ) ;
2014-10-07 16:41:08 +02:00
2014-04-08 23:40:13 +02:00
}
2013-04-04 15:41:17 +02:00
2014-04-02 15:29:51 +02:00
private void doShowSessionExpired ( ) {
GWT . runAsync ( UserSelectionDialog . class , new RunAsyncCallback ( ) {
@Override
public void onSuccess ( ) {
CheckSession . showLogoutDialog ( ) ;
}
public void onFailure ( Throwable reason ) {
Window . alert ( " Could not load this component: " + reason . getMessage ( ) ) ;
}
} ) ;
}
2014-10-07 16:41:08 +02:00
2013-04-04 15:41:17 +02:00
private void doShowLikes ( final String feedId ) {
2016-09-26 17:07:44 +02:00
final UserSelectionDialog dlg = new UserSelectionDialog ( " People who set this as Favorite " , eventBus ) ;
dlg . center ( ) ;
dlg . show ( ) ;
newsService . getAllLikesByFeed ( feedId , new AsyncCallback < ArrayList < Like > > ( ) {
2013-04-04 15:41:17 +02:00
@Override
2016-09-26 17:07:44 +02:00
public void onFailure ( Throwable caught ) {
Window . alert ( " People who liked this could not be retrieved: " + caught . getMessage ( ) ) ;
}
2013-04-04 15:41:17 +02:00
2016-09-26 17:07:44 +02:00
@Override
public void onSuccess ( ArrayList < Like > result ) {
ArrayList < ItemSelectableBean > toShow = new ArrayList < ItemSelectableBean > ( ) ;
for ( Like like : result ) {
toShow . add ( new ItemSelectableBean ( like . getUserid ( ) , like . getFullName ( ) , like . getThumbnailURL ( ) ) ) ;
}
eventBus . fireEvent ( new UsersFetchedEvent ( toShow ) ) ;
2013-04-04 15:41:17 +02:00
}
} ) ;
}
2015-07-15 18:47:28 +02:00
private void doAddComment ( final TweetTemplate owner , String text , HashSet < String > mentionedUsers ) {
2015-05-18 16:30:22 +02:00
newsService . comment ( owner . getFeedKey ( ) , text , mentionedUsers , owner . getMyFeedUserId ( ) , owner . isAppFeed ( ) , new AsyncCallback < OperationResult > ( ) {
2013-04-04 15:41:17 +02:00
@Override
public void onFailure ( Throwable caught ) {
Window . alert ( " Could not deliver this comment: " + caught . getMessage ( ) ) ;
}
@Override
2015-05-18 16:30:22 +02:00
public void onSuccess ( OperationResult result ) {
2013-04-04 15:41:17 +02:00
if ( result ! = null ) {
2015-05-18 16:30:22 +02:00
if ( ! result . isSuccess ( ) ) {
CheckSession . showLogoutDialog ( ) ;
}
else {
Comment comment = ( Comment ) result . getObject ( ) ;
2015-12-11 14:16:21 +01:00
owner . addComment ( new SingleComment ( comment , owner , ( comment . getUserid ( ) . equals ( myUserInfo . getUsername ( ) ) ) ) ) ;
2015-05-18 16:30:22 +02:00
owner . setCommentingDisabled ( false ) ;
owner . updateCommentsNumberCount ( ) ;
owner . showAddCommentForm ( false ) ;
2016-01-26 18:28:08 +01:00
2016-01-28 15:28:06 +01:00
if ( owner . isUser ( ) ) {
2016-01-26 18:28:08 +01:00
// alert the User statistics portlet to increment the number of comments got
try {
2016-01-28 11:07:42 +01:00
NewsFeed . pageBusAdapter . PageBusPublish ( PageBusEvents . commentsIncrement , " " , Defaults . STRING_JSONIZER ) ;
2016-01-26 18:28:08 +01:00
} catch ( PageBusAdapterException e ) {
GWT . log ( e . toString ( ) ) ;
}
2016-01-28 15:28:06 +01:00
}
2015-05-18 16:30:22 +02:00
}
}
2013-04-04 15:41:17 +02:00
else {
Window . alert ( " Could not deliver this comment. Please try again in a short while. " ) ;
}
}
} ) ;
}
2015-12-11 14:16:21 +01:00
private void doEditComment ( final TweetTemplate owner , Comment edited , final HTMLPanel commentPanel ) {
2015-05-18 16:30:22 +02:00
newsService . editComment ( edited , new AsyncCallback < OperationResult > ( ) {
2013-04-04 15:41:17 +02:00
@Override
public void onFailure ( Throwable caught ) {
Window . alert ( " Could not edit this comment: " + caught . getMessage ( ) ) ;
}
@Override
2015-05-18 16:30:22 +02:00
public void onSuccess ( OperationResult result ) {
2013-04-04 15:41:17 +02:00
if ( result ! = null ) {
2015-05-18 16:30:22 +02:00
if ( ! result . isSuccess ( ) ) {
CheckSession . showLogoutDialog ( ) ;
}
else {
Comment comment = ( Comment ) result . getObject ( ) ;
2015-12-11 14:16:21 +01:00
owner . updateSingleComment ( comment , commentPanel ) ;
2015-05-18 16:30:22 +02:00
owner . setCommentingDisabled ( false ) ;
}
2013-04-04 15:41:17 +02:00
}
else {
Window . alert ( " Could not deliver this comment. Please try again in a short while. " ) ;
}
}
} ) ;
}
private void doShowComments ( final TweetTemplate owner , final boolean commentForm2Add ) {
owner . showLoadingComments ( ) ;
newsService . getAllCommentsByFeed ( owner . getFeedKey ( ) , new AsyncCallback < ArrayList < Comment > > ( ) {
@Override
public void onFailure ( Throwable caught ) {
Window . alert ( " Comments could not be retrieved: " + caught . getMessage ( ) ) ;
}
@Override
public void onSuccess ( ArrayList < Comment > comments ) {
owner . clearComments ( ) ;
for ( Comment comment : comments )
2015-12-11 14:16:21 +01:00
owner . addComment ( new SingleComment ( comment , owner , ( comment . getUserid ( ) . equals ( myUserInfo . getUsername ( ) ) ) ) ) ;
2013-04-04 15:41:17 +02:00
owner . setCommentsFetched ( true ) ;
if ( commentForm2Add )
2014-04-11 12:50:23 +02:00
owner . showAddCommentForm ( false ) ;
2013-04-04 15:41:17 +02:00
owner . updateCommentsNumberCount ( ) ;
2014-04-11 12:50:23 +02:00
owner . showAddCommentForm ( false ) ;
2013-04-04 15:41:17 +02:00
}
} ) ;
}
protected void doDeleteComment ( final TweetTemplate owner , String commentId ) {
newsService . deleteComment ( commentId , owner . getFeedKey ( ) , new AsyncCallback < Boolean > ( ) {
@Override
public void onFailure ( Throwable caught ) {
Window . alert ( " Comment could not be deleted: " + caught . getMessage ( ) ) ;
}
@Override
2015-05-18 16:30:22 +02:00
public void onSuccess ( Boolean result ) {
2013-04-04 15:41:17 +02:00
if ( result ) {
doShowComments ( owner , false ) ;
owner . updateCommentsNumberCount ( ) ;
2016-01-26 18:28:08 +01:00
2016-01-28 15:28:06 +01:00
if ( owner . isUser ( ) ) {
2016-01-26 18:28:08 +01:00
// alert the User statistics portlet to decrement the number of comments got
try {
2016-01-28 11:07:42 +01:00
NewsFeed . pageBusAdapter . PageBusPublish ( PageBusEvents . commentsDecrement , " " , Defaults . STRING_JSONIZER ) ;
2016-01-26 18:28:08 +01:00
} catch ( PageBusAdapterException ex ) {
GWT . log ( ex . toString ( ) ) ;
}
2016-01-28 15:28:06 +01:00
}
2013-04-04 15:41:17 +02:00
} else
Window . alert ( " Comment could not be deleted, please try again in a short while. " ) ;
}
} ) ;
}
private void doDeleteFeed ( final TweetTemplate toDelete ) {
2015-08-04 11:29:43 +02:00
if ( Window . confirm ( " Are you sure you want to delete this post? " ) ) {
2013-04-04 15:41:17 +02:00
newsService . deleteFeed ( toDelete . getFeedKey ( ) , new AsyncCallback < Boolean > ( ) {
@Override
public void onFailure ( Throwable caught ) {
Window . alert ( " Feed could not be deleted: " + caught . getMessage ( ) ) ;
}
@Override
public void onSuccess ( Boolean result ) {
if ( result ) {
toDelete . removeFromParent ( ) ;
2016-01-28 11:07:42 +01:00
2016-01-28 15:28:06 +01:00
if ( toDelete . isUser ( ) ) {
try {
// alert the User statistics portlet to decrement the number of user's posts
NewsFeed . pageBusAdapter . PageBusPublish ( PageBusEvents . postDecrement , " " , Defaults . STRING_JSONIZER ) ;
// alert the same portlet to decrement the number of likes/replies, if any
int numComments = toDelete . numberOfComments ( ) ;
int numLikes = toDelete . numberOfLikes ( ) ;
for ( int i = 0 ; i < numComments ; i + + )
NewsFeed . pageBusAdapter . PageBusPublish ( PageBusEvents . commentsDecrement , " " , Defaults . STRING_JSONIZER ) ;
for ( int i = 0 ; i < numLikes ; i + + )
NewsFeed . pageBusAdapter . PageBusPublish ( PageBusEvents . likesDecrement , " " , Defaults . STRING_JSONIZER ) ;
} catch ( PageBusAdapterException ex ) {
2016-01-28 11:07:42 +01:00
GWT . log ( ex . toString ( ) ) ;
}
2016-01-28 15:28:06 +01:00
}
2013-04-04 15:41:17 +02:00
} else
Window . alert ( " Feed could not be deleted, please try again in a short while. " ) ;
}
} ) ;
}
}
2014-03-10 16:47:02 +01:00
2013-07-11 12:19:36 +02:00
private void doShowFeed ( final TweetTemplate toShow ) {
String feedKey = toShow . getFeedKey ( ) ;
Window . Location . assign ( Window . Location . getHref ( ) + ( ( Window . Location . getHref ( ) . contains ( " ? " ) ) ? " &oid= " + feedKey : " ?oid= " + feedKey ) ) ;
}
2013-04-04 15:41:17 +02:00
/ * *
* set the filter type status for automatic reloading of tweets
* @param currentFilter
* /
public void setCurrentFilter ( FilterType currentFilter ) {
this . currentFilter = currentFilter ;
}
2014-04-09 18:45:21 +02:00
/ * *
*
* @return the current scope on the client
* /
public static String getCurrentScope ( ) {
return currentScope ;
}
2013-04-04 15:41:17 +02:00
}