diff --git a/.settings/org.eclipse.wst.common.component b/.settings/org.eclipse.wst.common.component index b0c273d..bf08e59 100644 --- a/.settings/org.eclipse.wst.common.component +++ b/.settings/org.eclipse.wst.common.component @@ -4,9 +4,6 @@ - - uses - diff --git a/src/main/java/org/gcube/portlets/user/newsfeed/client/NewsService.java b/src/main/java/org/gcube/portlets/user/newsfeed/client/NewsService.java index 7c21e1e..dc1e0ed 100644 --- a/src/main/java/org/gcube/portlets/user/newsfeed/client/NewsService.java +++ b/src/main/java/org/gcube/portlets/user/newsfeed/client/NewsService.java @@ -24,6 +24,8 @@ public interface NewsService extends RemoteService { ArrayList getOnlyLikedFeeds(); + ArrayList getMoreFeeds(int from, int quantity); + boolean like(String feedid, String feedText, String feedOwnerId); boolean deleteComment(String commentid, String feedid); diff --git a/src/main/java/org/gcube/portlets/user/newsfeed/client/NewsServiceAsync.java b/src/main/java/org/gcube/portlets/user/newsfeed/client/NewsServiceAsync.java index 02dbaf3..fabd194 100644 --- a/src/main/java/org/gcube/portlets/user/newsfeed/client/NewsServiceAsync.java +++ b/src/main/java/org/gcube/portlets/user/newsfeed/client/NewsServiceAsync.java @@ -46,5 +46,8 @@ public interface NewsServiceAsync { void getOnlyLikedFeeds(AsyncCallback> callback); void getSingleFeed(String feedKey, AsyncCallback callback); + + void getMoreFeeds(int from, int quantity, + AsyncCallback> callback); } diff --git a/src/main/java/org/gcube/portlets/user/newsfeed/client/event/ShowMoreUpdatesEvent.java b/src/main/java/org/gcube/portlets/user/newsfeed/client/event/ShowMoreUpdatesEvent.java new file mode 100644 index 0000000..694c7c6 --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/newsfeed/client/event/ShowMoreUpdatesEvent.java @@ -0,0 +1,21 @@ +package org.gcube.portlets.user.newsfeed.client.event; + +import com.google.gwt.event.shared.GwtEvent; + + + +public class ShowMoreUpdatesEvent extends GwtEvent { + public static Type TYPE = new Type(); + + public ShowMoreUpdatesEvent() { } + + @Override + public Type getAssociatedType() { + return TYPE; + } + + @Override + protected void dispatch(ShowMoreUpdatesEventHandler handler) { + handler.onShowMoreUpdatesClick(this); + } +} diff --git a/src/main/java/org/gcube/portlets/user/newsfeed/client/event/ShowMoreUpdatesEventHandler.java b/src/main/java/org/gcube/portlets/user/newsfeed/client/event/ShowMoreUpdatesEventHandler.java new file mode 100644 index 0000000..e6c9ef6 --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/newsfeed/client/event/ShowMoreUpdatesEventHandler.java @@ -0,0 +1,7 @@ +package org.gcube.portlets.user.newsfeed.client.event; + +import com.google.gwt.event.shared.EventHandler; + +public interface ShowMoreUpdatesEventHandler extends EventHandler { + void onShowMoreUpdatesClick(ShowMoreUpdatesEvent event); +} diff --git a/src/main/java/org/gcube/portlets/user/newsfeed/client/panels/NewsFeedPanel.java b/src/main/java/org/gcube/portlets/user/newsfeed/client/panels/NewsFeedPanel.java index 65a1f32..3fe4a3e 100644 --- a/src/main/java/org/gcube/portlets/user/newsfeed/client/panels/NewsFeedPanel.java +++ b/src/main/java/org/gcube/portlets/user/newsfeed/client/panels/NewsFeedPanel.java @@ -31,10 +31,13 @@ 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; +import org.gcube.portlets.user.newsfeed.client.event.ShowMoreUpdatesEvent; +import org.gcube.portlets.user.newsfeed.client.event.ShowMoreUpdatesEventHandler; import org.gcube.portlets.user.newsfeed.client.event.ShowNewUpdatesEvent; import org.gcube.portlets.user.newsfeed.client.event.ShowNewUpdatesEventHandler; import org.gcube.portlets.user.newsfeed.client.templates.FilterPanel; import org.gcube.portlets.user.newsfeed.client.templates.NewFeedsAvailable; +import org.gcube.portlets.user.newsfeed.client.templates.ShowMoreFeeds; 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; @@ -78,6 +81,7 @@ public class NewsFeedPanel extends Composite { private HorizontalPanel filterPanelWrapper = new HorizontalPanel(); private FilterPanel filterPanel; private SimplePanel newUpdatesPanel = new SimplePanel(); + private SimplePanel showMoreUpdatesPanel = new SimplePanel(); private VerticalPanel newsPanel = new VerticalPanel(); private NewFeedsAvailable newsFeedAlert; @@ -118,7 +122,13 @@ public class NewsFeedPanel extends Composite { * events binder */ private void bind() { - + eventBus.addHandler(ShowMoreUpdatesEvent.TYPE, new ShowMoreUpdatesEventHandler() { + @Override + public void onShowMoreUpdatesClick(ShowMoreUpdatesEvent event) { + doShowMoreUpdates(); + } + }); + eventBus.addHandler(ShowNewUpdatesEvent.TYPE, new ShowNewUpdatesEventHandler() { @Override public void onShowNewUpdatesClick(ShowNewUpdatesEvent event) { @@ -357,6 +367,7 @@ public class NewsFeedPanel extends Composite { }); } + /** * called when a user click on the are new updates */ @@ -448,11 +459,18 @@ public class NewsFeedPanel extends Composite { newsPanel.setHorizontalAlignment(HasAlignment.ALIGN_LEFT); newsPanel.setVerticalAlignment(HasVerticalAlignment.ALIGN_TOP); for (EnhancedFeed feed : feeds) { - newsPanel.add(new TweetTemplate(false, showFeedTimelineSource, myUserInfo, feed, eventBus)); - allUpdates.add(feed); + newsPanel.add(new TweetTemplate(false, showFeedTimelineSource, myUserInfo, feed, eventBus)); //in the view + allUpdates.add(feed); //in the model } if (feeds.size() < 5) { newsPanel.add(new Image(spacer)); + } + //if you are showing more than feedsNoPerCategory*3-1 feeds there is probably more + //if (feeds.size() >= feedsNoPerCategory*3-1) { + if (true) { + GWT.log("Show MORE " + feedsNoPerCategory); + showMoreUpdatesPanel.add(new ShowMoreFeeds(eventBus)); + newsPanel.add(showMoreUpdatesPanel); } isFirstTweet = false; } @@ -471,7 +489,38 @@ public class NewsFeedPanel extends Composite { } }); } - + /** + * called when a user click on show more updates + */ + protected void doShowMoreUpdates() { + newsPanel.remove(showMoreUpdatesPanel); + int from = allUpdates.size()+1; + final int quantity = 5; + GWT.log("AllUpdatesNo = " + from); + newsService.getMoreFeeds(from, quantity, new AsyncCallback>() { + @Override + public void onSuccess(ArrayList feeds) { + if (feeds != null) { + int c = 1; + for (EnhancedFeed feed : feeds) { + 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"); + newsPanel.add(showMoreUpdatesPanel); + } + } + } + @Override + public void onFailure(Throwable caught) { + newsPanel.add(new HTML("
" + + "Ops! There were problems while retrieving your feeds!.
" + + "Please try again in a short while.
")); + } + }); + } /** * Only User Connections */ diff --git a/src/main/java/org/gcube/portlets/user/newsfeed/client/templates/ShowMoreFeeds.java b/src/main/java/org/gcube/portlets/user/newsfeed/client/templates/ShowMoreFeeds.java new file mode 100644 index 0000000..58c9a5a --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/newsfeed/client/templates/ShowMoreFeeds.java @@ -0,0 +1,47 @@ +package org.gcube.portlets.user.newsfeed.client.templates; + +import org.gcube.portlets.user.newsfeed.client.event.ShowMoreUpdatesEvent; + +import com.google.gwt.core.client.GWT; +import com.google.gwt.dom.client.Style.Unit; +import com.google.gwt.event.dom.client.ClickEvent; +import com.google.gwt.event.shared.HandlerManager; +import com.google.gwt.uibinder.client.UiBinder; +import com.google.gwt.uibinder.client.UiField; +import com.google.gwt.uibinder.client.UiHandler; +import com.google.gwt.user.client.ui.Composite; +import com.google.gwt.user.client.ui.HTML; +import com.google.gwt.user.client.ui.HTMLPanel; +import com.google.gwt.user.client.ui.Widget; + +public class ShowMoreFeeds extends Composite { + + private static NewFeedsAvailableUiBinder uiBinder = GWT + .create(NewFeedsAvailableUiBinder.class); + + interface NewFeedsAvailableUiBinder extends + + UiBinder { + } + + private HandlerManager eventBus; + + @UiField HTML caption; + @UiField HTMLPanel panel; + + + public ShowMoreFeeds(HandlerManager eventBus) { + initWidget(uiBinder.createAndBindUi(this)); + this.eventBus = eventBus; + panel.getElement().getStyle().setMarginTop(10, Unit.PX); + caption.addStyleName("new-feeds-show"); + caption.getElement().getStyle().setBackgroundColor("transparent"); + caption.getElement().getStyle().setFontSize(14, Unit.PX); + caption.setHTML("Show more feeds"); + } + + @UiHandler("caption") + void onClick(ClickEvent e) { + eventBus.fireEvent(new ShowMoreUpdatesEvent()); + } +} diff --git a/src/main/java/org/gcube/portlets/user/newsfeed/client/templates/ShowMoreFeeds.ui.xml b/src/main/java/org/gcube/portlets/user/newsfeed/client/templates/ShowMoreFeeds.ui.xml new file mode 100644 index 0000000..743c429 --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/newsfeed/client/templates/ShowMoreFeeds.ui.xml @@ -0,0 +1,7 @@ + + + + + + \ No newline at end of file diff --git a/src/main/java/org/gcube/portlets/user/newsfeed/server/NewsServiceImpl.java b/src/main/java/org/gcube/portlets/user/newsfeed/server/NewsServiceImpl.java index e5c2372..5143235 100644 --- a/src/main/java/org/gcube/portlets/user/newsfeed/server/NewsServiceImpl.java +++ b/src/main/java/org/gcube/portlets/user/newsfeed/server/NewsServiceImpl.java @@ -98,7 +98,7 @@ public class NewsServiceImpl extends RemoteServiceServlet implements NewsService _log.warn("USER IS NULL setting testing user and Running OUTSIDE PORTAL"); user = "test.user"; user = "massimiliano.assante"; - SessionManager.getInstance().getASLSession(sessionID, user).setScope("/gcube/devVRE/testvrefolder2"); + SessionManager.getInstance().getASLSession(sessionID, user).setScope("/gcube/devsec/devVRE"); } else { withinPortal = true; @@ -308,8 +308,36 @@ public class NewsServiceImpl extends RemoteServiceServlet implements NewsService } return new EnhancedFeed(); } - - + /** + * @param strat the range start (most recent feeds for this vre) has to be greater than 0 + * @param quantity the number of most recent feeds for this vre starting from "start" param + */ + @Override + public ArrayList getMoreFeeds(int start, int quantity) { + ArrayList toMerge = new ArrayList(); + HashMap feedsMap = new HashMap(); + String vreid = getASLSession().getScope(); + _log.debug("Asking more feed for Timeline " + vreid + " from " + start + " get other " + quantity); + ArrayList OrganizationFeeds; + try { + OrganizationFeeds = (ArrayList) store.getRecentFeedsByVREAndRange(vreid, start, quantity); + for (Feed feed : OrganizationFeeds) { + feedsMap.put(feed.getKey(), feed); + } + } + catch (Exception e) { + e.printStackTrace(); + return null; + } + + for (String key: feedsMap.keySet()) { + toMerge.add(feedsMap.get(key)); + } + //sort the feeds in reverse chronological order + Collections.sort(toMerge, Collections.reverseOrder()); + + return enhanceFeeds(toMerge, 2); + } /** * just for testing purposes * @@ -324,29 +352,29 @@ public class NewsServiceImpl extends RemoteServiceServlet implements NewsService ArrayList toMerge = new ArrayList(); HashMap feedsMap = new HashMap(); - ArrayList OrganizationFeeds = (ArrayList) store.getRecentFeedsByVRE("/gcube/devsec/devVRE", 10); + ArrayList OrganizationFeeds = (ArrayList) store.getRecentFeedsByVRE("/gcube/devsec/devVRE", 5); for (Feed feed : OrganizationFeeds) { feedsMap.put(feed.getKey(), feed); _log.trace("Reading desc: " + feed.getDescription()); } - if (! onlyConnections) { - //User Own Feeds - ArrayList userFeeds = (ArrayList) store.getRecentFeedsByUser(userName, 10); - for (Feed feed : userFeeds) - feedsMap.put(feed.getKey(), feed); - // //Portal Feeds - ArrayList portalFeeds = (ArrayList) store.getAllPortalPrivacyLevelFeeds(); - for (Feed feed : portalFeeds) - feedsMap.put(feed.getKey(), feed); - } - //UserFriends Feeds - ArrayList userFriendsIds = (ArrayList)store.getFriends(userName); - for (String userid : userFriendsIds) { - for (Feed feed : store.getRecentFeedsByUser(userid, 10)) { - feedsMap.put(feed.getKey(), feed); - } - } +// if (! onlyConnections) { +// //User Own Feeds +// ArrayList userFeeds = (ArrayList) store.getRecentFeedsByUser(userName, 10); +// for (Feed feed : userFeeds) +// feedsMap.put(feed.getKey(), feed); +// // //Portal Feeds +// ArrayList portalFeeds = (ArrayList) store.getAllPortalPrivacyLevelFeeds(); +// for (Feed feed : portalFeeds) +// feedsMap.put(feed.getKey(), feed); +// } +// //UserFriends Feeds +// ArrayList userFriendsIds = (ArrayList)store.getFriends(userName); +// for (String userid : userFriendsIds) { +// for (Feed feed : store.getRecentFeedsByUser(userid, 10)) { +// feedsMap.put(feed.getKey(), feed); +// } +// } for (String key: feedsMap.keySet()) { toMerge.add(feedsMap.get(key)); } @@ -744,7 +772,7 @@ public class NewsServiceImpl extends RemoteServiceServlet implements NewsService int minutes = 0; String label = ""; boolean showTimelineSource = true; - + String propertyfile = ""; try { ServletContext servletContext = getServletContext(); @@ -766,14 +794,14 @@ public class NewsServiceImpl extends RemoteServiceServlet implements NewsService label = props.getProperty(VRE_LABEL); try { showTimelineSource = Boolean.parseBoolean(props.getProperty(SHOW_TIMELINE_SOURCE)); - + } //catch exception in case the property value isNot true or false catch (ClassCastException ex) { showTimelineSource = true; _log.error(showTimelineSource + " must be true or false, returning true"); } - + } //catch exception in case properties file does not exist catch(IOException e) { @@ -785,4 +813,6 @@ public class NewsServiceImpl extends RemoteServiceServlet implements NewsService return new CustomConfiguration(minutes, label, showTimelineSource); } + + } diff --git a/src/main/resources/clientlog4j.properties b/src/main/resources/clientlog4j.properties index a4f0d7c..4a2e1cd 100644 --- a/src/main/resources/clientlog4j.properties +++ b/src/main/resources/clientlog4j.properties @@ -7,4 +7,6 @@ log4j.appender.A1.layout.ConversionPattern=%d [%t] %-5p %c - %m%n # Print only messages of level TRACE or above in the package org.gcube log4j.logger.org.gcube=TRACE -log4j.logger.org.gcube.application.framework.core.session=INFO \ No newline at end of file +log4j.logger.org.gcube.application.framework.core.session=INFO +log4j.logger.org.gcube.common.scope.impl.DefaultScopeProvider=ERROR +log4j.logger.com.netflix.astyanax.connectionpool.impl.CountingConnectionPoolMonitor=ERROR \ No newline at end of file