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 ;
2013-04-04 15:41:17 +02:00
import org.gcube.portal.databook.shared.ClientFeed ;
import org.gcube.portal.databook.shared.Comment ;
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 ;
import org.gcube.portal.databook.shared.UserInfo ;
import org.gcube.portlets.user.newsfeed.client.FilterType ;
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 ;
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 ;
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 ;
2013-04-04 15:41:17 +02:00
import org.gcube.portlets.user.newsfeed.client.event.StopTimerEvent ;
import org.gcube.portlets.user.newsfeed.client.event.StopTimerEventHandler ;
import org.gcube.portlets.user.newsfeed.client.panels.dialog.LikesDialog ;
import org.gcube.portlets.user.newsfeed.client.templates.FilterPanel ;
2013-04-05 16:16:07 +02:00
import org.gcube.portlets.user.newsfeed.client.templates.NewFeedsAvailable ;
2013-04-04 15:41:17 +02:00
import org.gcube.portlets.user.newsfeed.client.templates.SingleComment ;
import org.gcube.portlets.user.newsfeed.client.templates.TweetTemplate ;
import org.gcube.portlets.user.newsfeed.shared.EnhancedFeed ;
2013-04-04 17:29:51 +02:00
import org.gcube.portlets.user.newsfeed.shared.UserSettings ;
2013-04-04 15:41:17 +02:00
import com.google.gwt.core.client.GWT ;
import com.google.gwt.core.client.RunAsyncCallback ;
import com.google.gwt.event.shared.HandlerManager ;
import com.google.gwt.user.client.Timer ;
import com.google.gwt.user.client.Window ;
import com.google.gwt.user.client.rpc.AsyncCallback ;
import com.google.gwt.user.client.ui.Composite ;
import com.google.gwt.user.client.ui.HTML ;
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 ;
2013-04-09 17:35:23 +02:00
import edu.emory.mathcs.backport.java.util.Collections ;
2013-04-04 15:41:17 +02:00
/ * *
*
* @author Massimiliano Assante , ISTI - CNR
*
* /
public class NewsFeedPanel extends Composite {
/ * *
* 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 ( ) ;
private HorizontalPanel filterPanel = new HorizontalPanel ( ) ;
2013-04-05 16:16:07 +02:00
private SimplePanel newUpdatesPanel = new SimplePanel ( ) ;
2013-04-04 15:41:17 +02:00
private VerticalPanel newsPanel = new VerticalPanel ( ) ;
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-04 15:41:17 +02:00
public static final String LIKE_LABEL = " Favorite " ;
public static final String LIKED_LABEL = " Favorited " ;
public static final String COMMENT_LABEL = " Reply " ;
public static final String MESSAGE_LABEL = " Message " ;
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-04 15:41:17 +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 ;
private Image loadingImage ;
private UserInfo myUserInfo ;
private FilterType currentFilter ;
private Timer feedsTimer ;
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 ( ) {
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 ( StopTimerEvent . TYPE , new StopTimerEventHandler ( ) {
@Override
public void onStopTimer ( StopTimerEvent event ) {
GWT . log ( " Stop timer " ) ;
if ( event . isRestart ( ) )
resetTimer ( ) ;
else
stopTimer ( ) ;
}
} ) ;
eventBus . addHandler ( AddLikeEvent . TYPE , new AddLikeEventHandler ( ) {
@Override
public void onAddLike ( AddLikeEvent event ) {
resetTimer ( ) ;
doAddLike ( event . getOwner ( ) , event . getFeedId ( ) ) ;
}
} ) ;
eventBus . addHandler ( AddCommentEvent . TYPE , new AddCommentEventHandler ( ) {
@Override
public void onAddComment ( AddCommentEvent event ) {
resetTimer ( ) ;
doAddComment ( event . getOwner ( ) , event . getText ( ) ) ;
}
} ) ;
eventBus . addHandler ( EditCommentEvent . TYPE , new EditCommentEventHandler ( ) {
@Override
public void onEditComment ( EditCommentEvent event ) {
resetTimer ( ) ;
doEditComment ( event . getOwner ( ) , event . getCommentInstance ( ) ) ;
}
} ) ;
eventBus . addHandler ( SeeLikesEvent . TYPE , new SeeLikesEventHandler ( ) {
@Override
public void onSeeLikes ( SeeLikesEvent event ) {
resetTimer ( ) ;
doShowLikes ( event . getFeedId ( ) ) ;
}
} ) ;
eventBus . addHandler ( SeeCommentsEvent . TYPE , new SeeCommentsEventHandler ( ) {
@Override
public void onSeeComments ( SeeCommentsEvent event ) {
resetTimer ( ) ;
doShowComments ( event . getOwner ( ) , event . isCommentForm2Add ( ) ) ;
}
} ) ;
eventBus . addHandler ( DeleteCommentEvent . TYPE , new DeleteCommentEventHandler ( ) {
@Override
public void onDeleteComment ( DeleteCommentEvent event ) {
resetTimer ( ) ;
doDeleteComment ( event . getOwner ( ) , event . getCommentId ( ) ) ;
}
} ) ;
eventBus . addHandler ( DeleteFeedEvent . TYPE , new DeleteFeedEventHandler ( ) {
@Override
public void onDeleteFeed ( DeleteFeedEvent event ) {
resetTimer ( ) ;
doDeleteFeed ( event . getToDelete ( ) ) ;
}
} ) ;
}
/ * *
*
* /
public NewsFeedPanel ( ) {
bind ( ) ;
mainPanel . add ( filterPanel ) ;
2013-04-05 16:16:07 +02:00
mainPanel . add ( newUpdatesPanel ) ;
2013-04-04 15:41:17 +02:00
mainPanel . add ( newsPanel ) ;
filterPanel . add ( new FilterPanel ( this , newsService ) ) ;
initWidget ( mainPanel ) ;
newsPanel . clear ( ) ;
newsPanel . setWidth ( " 100% " ) ;
newsPanel . setHeight ( " 300px " ) ;
newsPanel . setHorizontalAlignment ( HasAlignment . ALIGN_CENTER ) ;
newsPanel . setVerticalAlignment ( HasVerticalAlignment . ALIGN_TOP ) ;
loadingImage = new Image ( loading ) ;
newsPanel . add ( loadingImage ) ;
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 ( ) ;
delayMillis = result . getRefreshingTimeInMillis ( ) ;
if ( result . getUserInfo ( ) . getUsername ( ) . equals ( " test.user " ) ) {
2013-04-04 15:41:17 +02:00
Window . alert ( " Your session has expired, please log out and login again " ) ;
}
else {
showAllUpdatesFeeds ( ) ;
currentFilter = FilterType . ALL_UPDATES ;
}
}
} ) ;
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 ) ;
}
2013-04-05 16:16:07 +02:00
2013-04-04 15:41:17 +02:00
private void resetTimer ( ) {
feedsTimer . cancel ( ) ;
feedsTimer . scheduleRepeating ( delayMillis ) ;
}
private void stopTimer ( ) {
feedsTimer . cancel ( ) ;
}
/ * *
*
* /
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 ;
}
}
2013-04-08 19:20:48 +02:00
/ * *
* check for updates
* /
2013-04-05 16:16:07 +02:00
private void checkAllUpdatesFeeds ( ) {
newsService . getAllUpdateUserFeeds ( new AsyncCallback < ArrayList < EnhancedFeed > > ( ) {
@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
2013-04-09 17:35:23 +02:00
GWT . log ( " Last Mine: " + allUpdates . get ( 0 ) . getFeed ( ) . getDescription ( ) ) ;
GWT . log ( " Last Retr.: " + feeds . get ( 0 ) . getFeed ( ) . getDescription ( ) ) ;
2013-04-08 17:25:37 +02:00
tempCacheNewUpdates = new ArrayList < EnhancedFeed > ( ) ; //need to clear it everytime i check (in case someone deleted the updated in the meanwhile)
2013-04-05 16:16:07 +02:00
//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 ) {
2013-04-08 17:25:37 +02:00
//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 ) ;
2013-04-05 16:16:07 +02:00
currNewUpdatesNo = i ;
}
}
}
@Override
public void onFailure ( Throwable caught ) { }
} ) ;
}
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 ;
//need to put the in reverse order;
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
//timer for the transition
Timer t = new Timer ( ) {
@Override
public void run ( ) {
tt . setcontentAreaStyle ( " visible " ) ;
}
} ;
t . schedule ( 100 ) ;
}
}
2013-04-09 17:35:23 +02:00
/ * *
* used when addin directly a feed from the UI ( IPC )
* @param userid
* @param fullName
* @param thumbURL
* @param description
* /
public void addJustAddedFeed ( ClientFeed cFeed ) {
Feed feed = new Feed ( cFeed . getKey ( ) , 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 ( ) ) ;
EnhancedFeed toAdd = new EnhancedFeed ( feed , false , true ) ; //false cuz he could not have liked this yet and true because is the current user's
final TweetTemplate tt = new TweetTemplate ( myUserInfo , toAdd , eventBus , true ) ;
if ( isFirstTweet ) {
newsPanel . clear ( ) ;
newsPanel . add ( new Image ( spacer ) ) ;
isFirstTweet = false ;
}
newsPanel . insert ( tt , 0 ) ;
Timer t = new Timer ( ) {
@Override
public void run ( ) {
tt . setcontentAreaStyle ( " visible " ) ;
}
} ;
t . schedule ( 500 ) ;
//insert it also in the model so that the user who created it do not get notified about this new update
allUpdates . add ( 0 , toAdd ) ; //insert in the model
}
2013-04-05 16:16:07 +02:00
2013-04-04 15:41:17 +02:00
/ * *
* All Updates
* /
public void showAllUpdatesFeeds ( ) {
showLoader ( ) ;
resetTimer ( ) ;
newsService . getAllUpdateUserFeeds ( new AsyncCallback < ArrayList < EnhancedFeed > > ( ) {
@Override
public void onSuccess ( ArrayList < EnhancedFeed > feeds ) {
newsPanel . clear ( ) ;
if ( feeds ! = null ) {
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 <a class= \" vrelink \" href= \" /group/data-e-infrastructure-gateway/join-new/ \" ><span class= \" important \" >joining</span></a> some of the available " +
" <br>Virtual Research Environments.</div> " ) ) ;
isFirstTweet = true ;
}
else {
newsPanel . setHeight ( " " ) ;
newsPanel . setHorizontalAlignment ( HasAlignment . ALIGN_LEFT ) ;
newsPanel . setVerticalAlignment ( HasVerticalAlignment . ALIGN_TOP ) ;
2013-04-05 16:16:07 +02:00
for ( EnhancedFeed feed : feeds ) {
2013-04-04 15:41:17 +02:00
newsPanel . add ( new TweetTemplate ( myUserInfo , feed , eventBus ) ) ;
2013-04-05 16:16:07 +02:00
allUpdates . add ( feed ) ;
}
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 ) {
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> " ) ) ;
}
} ) ;
}
2013-04-05 16:16:07 +02:00
2013-04-04 15:41:17 +02:00
/ * *
* Only User Connections
* /
public void showOnlyConnectionsFeeds ( ) {
showLoader ( ) ;
resetTimer ( ) ;
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 )
newsPanel . add ( new TweetTemplate ( myUserInfo , feed , eventBus ) ) ;
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 ( ) ;
resetTimer ( ) ;
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 )
newsPanel . add ( new TweetTemplate ( myUserInfo , feed , eventBus ) ) ;
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 ( ) ;
resetTimer ( ) ;
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 )
newsPanel . add ( new TweetTemplate ( myUserInfo , feed , eventBus ) ) ;
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 ) ;
newsPanel . add ( loadingImage ) ;
}
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 16:07:17 +02:00
stopTimer ( ) ;
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
public void onSuccess ( Boolean result ) { }
} ) ;
}
private void doShowLikes ( final String feedId ) {
GWT . runAsync ( new RunAsyncCallback ( ) {
@Override
public void onSuccess ( ) {
final LikesDialog dlg = new LikesDialog ( ) ;
dlg . center ( ) ;
dlg . show ( ) ;
newsService . getAllLikesByFeed ( feedId , new AsyncCallback < ArrayList < Like > > ( ) {
@Override
public void onFailure ( Throwable caught ) {
Window . alert ( " People who liked this could not be retrieved: " + caught . getMessage ( ) ) ;
}
@Override
public void onSuccess ( ArrayList < Like > result ) {
dlg . showLikes ( result ) ;
}
} ) ;
}
public void onFailure ( Throwable reason ) {
Window . alert ( " Could not load this component: " + reason . getMessage ( ) ) ;
}
} ) ;
2013-04-05 16:16:07 +02:00
2013-04-04 15:41:17 +02:00
}
private void doAddComment ( final TweetTemplate owner , String text ) {
2013-04-08 17:25:37 +02:00
newsService . comment ( owner . getFeedKey ( ) , text , owner . getMyFeedUserId ( ) , owner . isAppFeed ( ) , new AsyncCallback < Comment > ( ) {
2013-04-04 15:41:17 +02:00
@Override
public void onFailure ( Throwable caught ) {
Window . alert ( " Could not deliver this comment: " + caught . getMessage ( ) ) ;
}
@Override
public void onSuccess ( Comment result ) {
if ( result ! = null ) {
owner . addComment ( new SingleComment ( result , owner , ( result . getUserid ( ) . equals ( myUserInfo . getUsername ( ) ) ) ) ) ;
owner . setCommentingDisabled ( false ) ;
owner . updateCommentsNumberCount ( ) ;
}
else {
Window . alert ( " Could not deliver this comment. Please try again in a short while. " ) ;
}
}
} ) ;
}
private void doEditComment ( final TweetTemplate owner , Comment edited ) {
newsService . editComment ( edited , new AsyncCallback < Comment > ( ) {
@Override
public void onFailure ( Throwable caught ) {
Window . alert ( " Could not edit this comment: " + caught . getMessage ( ) ) ;
}
@Override
public void onSuccess ( Comment result ) {
if ( result ! = null ) {
owner . addComment ( new SingleComment ( result , owner , ( result . getUserid ( ) . equals ( myUserInfo . getUsername ( ) ) ) ) ) ;
owner . setCommentingDisabled ( false ) ;
}
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 )
owner . addComment ( new SingleComment ( comment , owner , ( comment . getUserid ( ) . equals ( myUserInfo . getUsername ( ) ) ) ) ) ;
owner . setCommentsFetched ( true ) ;
if ( commentForm2Add )
owner . showAddCommentForm ( ) ;
owner . updateCommentsNumberCount ( ) ;
}
} ) ;
}
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
public void onSuccess ( Boolean result ) {
if ( result ) {
doShowComments ( owner , false ) ;
owner . updateCommentsNumberCount ( ) ;
} else
Window . alert ( " Comment could not be deleted, please try again in a short while. " ) ;
}
} ) ;
}
private void doDeleteFeed ( final TweetTemplate toDelete ) {
if ( Window . confirm ( " Are you sure you want to delete this feed? " ) ) {
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 ( ) ;
} else
Window . alert ( " Feed could not be deleted, please try again in a short while. " ) ;
}
} ) ;
}
}
/ * *
* set the filter type status for automatic reloading of tweets
* @param currentFilter
* /
public void setCurrentFilter ( FilterType currentFilter ) {
this . currentFilter = currentFilter ;
}
}