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
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 ;
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 ;
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 ;
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 ;
2013-04-04 15:41:17 +02:00
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 ;
2014-03-11 19:29:39 +01:00
import org.gcube.portlets.user.newsfeed.client.templates.ShowMoreFeeds ;
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 ;
2014-03-13 16:07:35 +01:00
import org.gcube.portlets.user.newsfeed.shared.MoreFeedsBean ;
2013-04-04 17:29:51 +02:00
import org.gcube.portlets.user.newsfeed.shared.UserSettings ;
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 ;
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 ;
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 ;
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 ;
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 ;
/ * *
*
* @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 ( ) ;
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 ( ) ;
2014-03-13 16:07:35 +01:00
private VerticalPanel showMoreUpdatesPanel = new VerticalPanel ( ) ;
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 " ;
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 " ;
2014-03-10 16:47:02 +01:00
2014-02-13 10:17:48 +01:00
private String vreLabel ;
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 ;
2013-04-19 14:24:54 +02:00
private static final int feedsNoPerCategory = 10 ;
2014-03-13 16:07:35 +01:00
2013-04-04 15:41:17 +02:00
private Image loadingImage ;
private UserInfo myUserInfo ;
private FilterType currentFilter ;
private Timer feedsTimer ;
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 ( ) ) ;
}
} ) ;
eventBus . addHandler ( AddCommentEvent . TYPE , new AddCommentEventHandler ( ) {
@Override
public void onAddComment ( AddCommentEvent event ) {
doAddComment ( event . getOwner ( ) , event . getText ( ) ) ;
}
} ) ;
eventBus . addHandler ( EditCommentEvent . TYPE , new EditCommentEventHandler ( ) {
@Override
public void onEditComment ( EditCommentEvent event ) {
doEditComment ( event . getOwner ( ) , event . getCommentInstance ( ) ) ;
}
} ) ;
2013-10-07 01:02:11 +02:00
eventBus . addHandler ( SelectedUserEvent . TYPE , new SelectedUserEventHandler ( ) {
@Override
public void onSelectedUser ( SelectedUserEvent event ) {
GWT . log ( " event... " ) ;
Location . assign ( GCubeSocialNetworking . USER_PROFILE_LINK + " ? " +
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 ( ) ;
2013-04-11 12:58:50 +02:00
mainPanel . setWidth ( " 600px " ) ;
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% " ) ;
2014-03-13 16:07:35 +01:00
showMoreUpdatesPanel . setWidth ( " 100% " ) ;
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 ) ;
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 ( ) ;
2014-02-13 10:17:48 +01:00
delayMillis = result . getRefreshingTimeInMillis ( ) ;
2014-03-10 16:47:02 +01:00
vreLabel = result . getVreLabel ( ) ;
2013-04-04 17:29:51 +02:00
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 {
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 ( ) ;
2013-04-19 14:24:54 +02:00
} else {
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 ( ) ) {
2013-04-19 15:38:20 +02:00
filterPanelWrapper . setVisible ( true ) ;
2014-03-10 16:47:02 +01:00
showFeedTimelineSource = result . isShowTimelineSourceLabel ( ) ;
isInfrastructure = true ;
}
else
mainPanel . addStyleName ( " framed " ) ;
2013-04-19 14:24:54 +02: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 ) ;
}
2013-04-05 16:16:07 +02:00
2013-04-19 14:24:54 +02:00
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 ;
}
}
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 ) ;
}
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 ) {
String usrLink = " <a class= \" link \" href= \" " + GCubeSocialNetworking . USER_PROFILE_LINK + " ?uid= " + result . getFeed ( ) . getEntityId ( ) + " \" > " + result . getFeed ( ) . getFullName ( ) + " </a> " ;
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> " ) ) ;
} else {
newsPanel . setHeight ( " " ) ;
newsPanel . setHorizontalAlignment ( HasAlignment . ALIGN_LEFT ) ;
newsPanel . setVerticalAlignment ( HasVerticalAlignment . ALIGN_TOP ) ;
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
* /
2013-04-05 16:16:07 +02:00
private void checkAllUpdatesFeeds ( ) {
2013-04-19 14:24:54 +02:00
newsService . getAllUpdateUserFeeds ( feedsNoPerCategory , new AsyncCallback < ArrayList < EnhancedFeed > > ( ) {
2013-04-05 16:16:07 +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
2013-04-09 17:35:23 +02:00
GWT . log ( " Last Mine: " + allUpdates . get ( 0 ) . getFeed ( ) . getDescription ( ) ) ;
2013-04-11 12:58:50 +02:00
2013-04-09 17:35:23 +02:00
GWT . log ( " Last Retr.: " + feeds . get ( 0 ) . getFeed ( ) . getDescription ( ) ) ;
2013-04-11 12:58:50 +02:00
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-11 12:58:50 +02:00
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
2013-04-11 12:58:50 +02:00
2013-04-05 16:16:07 +02:00
int i = 0 ;
while ( i < feeds . size ( ) & & feeds . get ( i ) . getFeed ( ) . getTime ( ) . after ( myLastUpdateTime ) ) {
tempCacheNewUpdates . add ( feeds . get ( i ) ) ;
i + + ;
}
2013-04-11 12:58:50 +02:00
2013-04-05 16:16:07 +02:00
/ * 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 ) { }
} ) ;
}
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
//timer for the transition
Timer t = new Timer ( ) {
@Override
public void run ( ) {
tt . setcontentAreaStyle ( " visible " ) ;
}
} ;
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
/ * *
* 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 ) ;
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
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 ( ) ;
2013-04-19 14:24:54 +02:00
newsService . getAllUpdateUserFeeds ( feedsNoPerCategory , 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> " +
" 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> " + 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 ) ;
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
}
//if you are showing more than feedsNoPerCategory*3-1 feeds there is probably more
2014-03-13 16:07:35 +01:00
if ( feeds . size ( ) > = feedsNoPerCategory * 3 - 1 ) {
2014-03-11 19:29:39 +01:00
GWT . log ( " Show MORE " + feedsNoPerCategory ) ;
2014-03-13 16:07:35 +01:00
showMoreUpdatesPanel . setHorizontalAlignment ( HasAlignment . ALIGN_CENTER ) ;
2014-03-11 19:29:39 +01:00
showMoreUpdatesPanel . add ( new ShowMoreFeeds ( eventBus ) ) ;
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
/ * *
* called when a user click on show more updates
* /
2014-03-13 16:07:35 +01:00
protected void doShowMoreUpdates ( ) {
showMoreUpdatesPanel . remove ( 0 ) ;
showMoreUpdatesPanel . add ( loadingImage ) ;
int from = ( fromStartingPoint = = null ) ? allUpdates . size ( ) + 1 : fromStartingPoint ;
final int quantity = 10 ;
GWT . log ( " StartingPoint = " + from ) ;
newsService . getMoreFeeds ( from , quantity , new AsyncCallback < MoreFeedsBean > ( ) {
2014-03-11 19:29:39 +01:00
@Override
2014-03-13 16:07:35 +01:00
public void onSuccess ( MoreFeedsBean rangeFeeds ) {
newsPanel . remove ( showMoreUpdatesPanel ) ;
if ( rangeFeeds . getFeeds ( ) ! = null ) {
fromStartingPoint = rangeFeeds . getLastReturnedFeedTimelineIndex ( ) ;
2014-03-11 19:29:39 +01:00
int c = 1 ;
2014-03-13 16:07:35 +01:00
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
}
2014-03-11 19:29:39 +01:00
c + + ;
}
if ( c > = quantity ) { //there could be more feeds
GWT . log ( " there could be more feeds " ) ;
2014-03-13 16:07:35 +01:00
showMoreUpdatesPanel . clear ( ) ;
showMoreUpdatesPanel . add ( new ShowMoreFeeds ( eventBus ) ) ;
2014-03-11 19:29:39 +01:00
newsPanel . add ( showMoreUpdatesPanel ) ;
}
}
}
@Override
public void onFailure ( Throwable caught ) {
2014-03-13 16:07:35 +01:00
showMoreUpdatesPanel . clear ( ) ;
2014-03-11 19:29:39 +01:00
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-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 ) ;
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 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 ) {
2013-10-07 01:02:11 +02:00
GWT . runAsync ( UserSelectionDialog . class , new RunAsyncCallback ( ) {
2013-04-04 15:41:17 +02:00
@Override
public void onSuccess ( ) {
2013-10-07 01:02:11 +02:00
final UserSelectionDialog dlg = new UserSelectionDialog ( " People who set this as Favorite " , eventBus ) ;
2013-04-04 15:41:17 +02:00
dlg . center ( ) ;
2013-10-07 01:02:11 +02:00
dlg . show ( ) ;
2014-03-10 16:47:02 +01:00
2013-04-04 15:41:17 +02:00
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 ) {
2013-12-10 18:10:40 +01:00
ArrayList < ItemSelectableBean > toShow = new ArrayList < ItemSelectableBean > ( ) ;
2013-10-07 01:02:11 +02:00
for ( Like like : result ) {
2013-12-10 18:10:40 +01:00
toShow . add ( new ItemSelectableBean ( like . getUserid ( ) , like . getFullName ( ) , like . getThumbnailURL ( ) ) ) ;
2013-10-07 01:02:11 +02:00
}
eventBus . fireEvent ( new UsersFetchedEvent ( toShow ) ) ;
2013-04-04 15:41:17 +02:00
}
} ) ;
}
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. " ) ;
}
} ) ;
}
}
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 ;
}
}