Added yesterday recognition

git-svn-id: http://svn.research-infrastructures.eu/public/d4science/gcube/trunk/portlets/user/notifications@94236 82a268e6-3cf1-43bd-a215-b396298e98cf
This commit is contained in:
Massimiliano Assante 2014-04-03 13:07:08 +00:00
parent 23c4798335
commit d6409d7287
9 changed files with 86 additions and 34 deletions

View File

@ -7,16 +7,16 @@
<stringAttribute key="com.google.gwt.eclipse.core.STYLE" value="OBFUSCATED"/> <stringAttribute key="com.google.gwt.eclipse.core.STYLE" value="OBFUSCATED"/>
<stringAttribute key="com.google.gwt.eclipse.core.WEB_MODE" value="false"/> <stringAttribute key="com.google.gwt.eclipse.core.WEB_MODE" value="false"/>
<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS"> <listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
<listEntry value="/notifications/src/test/java/org/gcube/portlets/user/notifications/client/GwtTestNotifications.java"/> <listEntry value="/notifications"/>
</listAttribute> </listAttribute>
<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES"> <listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
<listEntry value="1"/> <listEntry value="4"/>
</listAttribute> </listAttribute>
<stringAttribute key="org.eclipse.jdt.junit.CONTAINER" value=""/> <stringAttribute key="org.eclipse.jdt.junit.CONTAINER" value=""/>
<booleanAttribute key="org.eclipse.jdt.junit.KEEPRUNNING_ATTR" value="false"/> <booleanAttribute key="org.eclipse.jdt.junit.KEEPRUNNING_ATTR" value="false"/>
<stringAttribute key="org.eclipse.jdt.junit.TESTNAME" value=""/> <stringAttribute key="org.eclipse.jdt.junit.TESTNAME" value=""/>
<stringAttribute key="org.eclipse.jdt.junit.TEST_KIND" value="org.eclipse.jdt.junit.loader.junit4"/> <stringAttribute key="org.eclipse.jdt.junit.TEST_KIND" value="org.eclipse.jdt.junit.loader.junit4"/>
<stringAttribute key="org.eclipse.jdt.launching.CLASSPATH_PROVIDER" value="com.google.gdt.eclipse.maven.mavenClasspathProvider"/> <stringAttribute key="org.eclipse.jdt.launching.CLASSPATH_PROVIDER" value="com.google.gdt.eclipse.maven.mavenClasspathProvider"/>
<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="org.gcube.portlets.user.notifications.client.GwtTestNotifications"/> <stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="org.gcube.portlets.user.notifications.test.GwtTestNotifications"/>
<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="notifications"/> <stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="notifications"/>
</launchConfiguration> </launchConfiguration>

View File

@ -7,16 +7,16 @@
<stringAttribute key="com.google.gwt.eclipse.core.STYLE" value="OBFUSCATED"/> <stringAttribute key="com.google.gwt.eclipse.core.STYLE" value="OBFUSCATED"/>
<stringAttribute key="com.google.gwt.eclipse.core.WEB_MODE" value="true"/> <stringAttribute key="com.google.gwt.eclipse.core.WEB_MODE" value="true"/>
<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS"> <listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
<listEntry value="/notifications/src/test/java/org/gcube/portlets/user/notifications/client/GwtTestNotifications.java"/> <listEntry value="/notifications"/>
</listAttribute> </listAttribute>
<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES"> <listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
<listEntry value="1"/> <listEntry value="4"/>
</listAttribute> </listAttribute>
<stringAttribute key="org.eclipse.jdt.junit.CONTAINER" value=""/> <stringAttribute key="org.eclipse.jdt.junit.CONTAINER" value=""/>
<booleanAttribute key="org.eclipse.jdt.junit.KEEPRUNNING_ATTR" value="false"/> <booleanAttribute key="org.eclipse.jdt.junit.KEEPRUNNING_ATTR" value="false"/>
<stringAttribute key="org.eclipse.jdt.junit.TESTNAME" value=""/> <stringAttribute key="org.eclipse.jdt.junit.TESTNAME" value=""/>
<stringAttribute key="org.eclipse.jdt.junit.TEST_KIND" value="org.eclipse.jdt.junit.loader.junit4"/> <stringAttribute key="org.eclipse.jdt.junit.TEST_KIND" value="org.eclipse.jdt.junit.loader.junit4"/>
<stringAttribute key="org.eclipse.jdt.launching.CLASSPATH_PROVIDER" value="com.google.gdt.eclipse.maven.mavenClasspathProvider"/> <stringAttribute key="org.eclipse.jdt.launching.CLASSPATH_PROVIDER" value="com.google.gdt.eclipse.maven.mavenClasspathProvider"/>
<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="org.gcube.portlets.user.notifications.client.GwtTestNotifications"/> <stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="org.gcube.portlets.user.notifications.test.GwtTestNotifications"/>
<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="notifications"/> <stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="notifications"/>
</launchConfiguration> </launchConfiguration>

View File

@ -1,7 +1,9 @@
<ReleaseNotes> <ReleaseNotes>
<Changeset component="org.gcube.portlet.user.notifications.1-2-0" <Changeset component="org.gcube.portlet.user.notifications.1-2-0"
date="2014-4-02"> date="2014-4-03">
<Change>Added support for show notifications by range</Change> <Change>Implemented automatic notifications scroll back in time</Change>
<Change>Updated description for post alerts</Change>
<Change>Made Notification Settings more evident</Change>
</Changeset> </Changeset>
<Changeset component="org.gcube.portlet.user.notifications.1-1-0" <Changeset component="org.gcube.portlet.user.notifications.1-1-0"
date="2014-3-03"> date="2014-3-03">

View File

@ -49,7 +49,6 @@ public class NotificationsPanel extends Composite {
public static final String loading = GWT.getModuleBaseURL() + "../images/feeds-loader.gif"; public static final String loading = GWT.getModuleBaseURL() + "../images/feeds-loader.gif";
private static final String spacer = GWT.getModuleBaseURL() + "../images/feeds-spacer.gif"; private static final String spacer = GWT.getModuleBaseURL() + "../images/feeds-spacer.gif";
private static final String warning = GWT.getModuleBaseURL() + "../images/warning_blue.png"; private static final String warning = GWT.getModuleBaseURL() + "../images/warning_blue.png";
private UserInfo myUserInfo;
private Image loadingImage; private Image loadingImage;
private ShowMoreNotifications showMoreWidget; private ShowMoreNotifications showMoreWidget;
//needed to know the next range start //needed to know the next range start
@ -85,7 +84,6 @@ public class NotificationsPanel extends Composite {
public void onFailure(Throwable caught) { public void onFailure(Throwable caught) {
} }
public void onSuccess(UserInfo result) { public void onSuccess(UserInfo result) {
myUserInfo = result;
if (result.getUsername().equals("test.user")) { if (result.getUsername().equals("test.user")) {
Window.alert("Your session has expired, please log out and login again"); Window.alert("Your session has expired, please log out and login again");
} }
@ -174,7 +172,7 @@ public class NotificationsPanel extends Composite {
mainPanel.add(new Image(spacer)); mainPanel.add(new Image(spacer));
//if you are showing more than NotificationConstants.NOTIFICATION_NUMBER //if you are showing more than NotificationConstants.NOTIFICATION_NUMBER
if (notCounter >= NotificationConstants.NOTIFICATION_NUMBER) { if (notCounter >= NotificationConstants.NOTIFICATION_NUMBER_PRE) {
GWT.log("Show MORE "); GWT.log("Show MORE ");
showMoreNotificationsPanel.setHorizontalAlignment(HasAlignment.ALIGN_CENTER); showMoreNotificationsPanel.setHorizontalAlignment(HasAlignment.ALIGN_CENTER);
showMoreWidget = new ShowMoreNotifications(); showMoreWidget = new ShowMoreNotifications();
@ -193,15 +191,13 @@ public class NotificationsPanel extends Composite {
* called when a user scroll down the page to the bottom * called when a user scroll down the page to the bottom
*/ */
private void doShowMoreNotifications() { private void doShowMoreNotifications() {
GWT.log("doShowMoreNotifications()");
showMoreNotificationsPanel.remove(0); showMoreNotificationsPanel.remove(0);
loadingImage.getElement().getStyle().setMargin(10, Unit.PX); loadingImage.getElement().getStyle().setMargin(10, Unit.PX);
showMoreNotificationsPanel.add(loadingImage); showMoreNotificationsPanel.add(loadingImage);
int from = (fromStartingPoint == 0) ? NotificationConstants.NOTIFICATION_NUMBER+1 : fromStartingPoint; int from = (fromStartingPoint == 0) ? NotificationConstants.NOTIFICATION_NUMBER_PRE+1 : fromStartingPoint;
fromStartingPoint = from; fromStartingPoint = from;
final int quantity = 10; final int quantity = NotificationConstants.NOTIFICATION_NUMBER_PER_REQUEST;
GWT.log("StartingPoint = " + from);
notificationService.getUserNotificationsByRange(from, quantity, new AsyncCallback<HashMap<Date,ArrayList<Notification>>>() { notificationService.getUserNotificationsByRange(from, quantity, new AsyncCallback<HashMap<Date,ArrayList<Notification>>>() {
@Override @Override
public void onSuccess(HashMap<Date, ArrayList<Notification>> notificationsPerDay) { public void onSuccess(HashMap<Date, ArrayList<Notification>> notificationsPerDay) {
@ -218,10 +214,8 @@ public class NotificationsPanel extends Composite {
notCounter++; notCounter++;
} }
} }
fromStartingPoint += notCounter; fromStartingPoint += notCounter;
GWT.log("StartingPoint incremented = " + fromStartingPoint);
if (notCounter >= quantity) { //there could be more notifications if (notCounter >= quantity) { //there could be more notifications
GWT.log("Show MORE ");
showMoreNotificationsPanel.setHorizontalAlignment(HasAlignment.ALIGN_CENTER); showMoreNotificationsPanel.setHorizontalAlignment(HasAlignment.ALIGN_CENTER);
showMoreWidget = new ShowMoreNotifications(); showMoreWidget = new ShowMoreNotifications();
showMoreNotificationsPanel.clear(); showMoreNotificationsPanel.clear();

View File

@ -9,6 +9,7 @@ import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.user.client.ui.Composite; import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.HTML; import com.google.gwt.user.client.ui.HTML;
import com.google.gwt.user.client.ui.Widget; import com.google.gwt.user.client.ui.Widget;
import com.google.gwt.user.datepicker.client.CalendarUtil;
/** /**
* @author Massimiliano Assante ISTI-CNR * @author Massimiliano Assante ISTI-CNR
@ -27,12 +28,34 @@ public class DayWrapper extends Composite {
public DayWrapper(Date day) { public DayWrapper(Date day) {
initWidget(uiBinder.createAndBindUi(this)); initWidget(uiBinder.createAndBindUi(this));
String notificationDate = DateTimeFormat.getFormat("yyyy MMMM dd").format(day); Date now = new Date();
String today = DateTimeFormat.getFormat("yyyy MMMM dd").format(new Date()); @SuppressWarnings("deprecation")
if (notificationDate.equals(today)) int currYear = now.getYear();
dayLabel.setHTML("Today"); @SuppressWarnings("deprecation")
else int notificationDateYear = day.getYear();
dayLabel.setHTML(DateTimeFormat.getFormat("EE, dd MMMM").format(day));
int dayInBetween = CalendarUtil.getDaysBetween(now, day);
String theDay = "";
switch (dayInBetween) {
case 0:
theDay = "Today";
break;
case -1:
theDay = "Yesterday";
break;
default:
if (currYear == notificationDateYear)
theDay = (DateTimeFormat.getFormat("EE, dd MMMM").format(day));
else {
theDay = (DateTimeFormat.getFormat("dd MMMM yyyy").format(day));
}
break;
}
this.dayLabel.setHTML(theDay);
} }
} }

View File

@ -74,9 +74,7 @@ public class NotificationsServiceImpl extends RemoteServiceServlet implements No
String sessionID = this.getThreadLocalRequest().getSession().getId(); String sessionID = this.getThreadLocalRequest().getSession().getId();
String user = (String) this.getThreadLocalRequest().getSession().getAttribute(ScopeHelper.USERNAME_ATTRIBUTE); String user = (String) this.getThreadLocalRequest().getSession().getAttribute(ScopeHelper.USERNAME_ATTRIBUTE);
if (user == null) { if (user == null) {
user = "test.user"; user = getDevelopmentUser();
//user = "massimiliano.assante";
_log.warn("USER IS NULL setting "+user+" and Running OUTSIDE PORTAL"); _log.warn("USER IS NULL setting "+user+" and Running OUTSIDE PORTAL");
withinPortal = false; withinPortal = false;
} }
@ -86,7 +84,11 @@ public class NotificationsServiceImpl extends RemoteServiceServlet implements No
System.out.println("SessionID = " + sessionID); System.out.println("SessionID = " + sessionID);
return SessionManager.getInstance().getASLSession(sessionID, user); return SessionManager.getInstance().getASLSession(sessionID, user);
} }
public String getDevelopmentUser() {
String user = "test.user";
user = "massimiliano.assante";
return user;
}
public UserInfo getUserInfo() { public UserInfo getUserInfo() {
try { try {
String username = getASLSession().getUsername(); String username = getASLSession().getUsername();
@ -121,7 +123,7 @@ public class NotificationsServiceImpl extends RemoteServiceServlet implements No
public HashMap<Date, ArrayList<Notification>> getUserNotifications() { public HashMap<Date, ArrayList<Notification>> getUserNotifications() {
HashMap<Date, ArrayList<Notification>> toReturn = new HashMap<Date, ArrayList<Notification>>(); HashMap<Date, ArrayList<Notification>> toReturn = new HashMap<Date, ArrayList<Notification>>();
try { try {
for (Notification notification : store.getAllNotificationByUser(getASLSession().getUsername(), NotificationConstants.NOTIFICATION_NUMBER)) { for (Notification notification : store.getAllNotificationByUser(getASLSession().getUsername(), NotificationConstants.NOTIFICATION_NUMBER_PRE)) {
Date dateWithoutTime = removeTimePart(notification.getTime()); Date dateWithoutTime = removeTimePart(notification.getTime());
if (! toReturn.containsKey(dateWithoutTime)) { if (! toReturn.containsKey(dateWithoutTime)) {
ArrayList<Notification> nots = new ArrayList<Notification>(); ArrayList<Notification> nots = new ArrayList<Notification>();

View File

@ -1,5 +1,16 @@
package org.gcube.portlets.user.notifications.shared; package org.gcube.portlets.user.notifications.shared;
/**
*
* @author Massimiliano Assante ISTI-CNR
*
*/
public class NotificationConstants { public class NotificationConstants {
public final static int NOTIFICATION_NUMBER = 70; /**
* the initial number of notification to be loaded at startup
*/
public final static int NOTIFICATION_NUMBER_PRE = 70;
/**
* the number of notification to be loaded each time after the startup
*/
public final static int NOTIFICATION_NUMBER_PER_REQUEST = 15;
} }

View File

@ -3,7 +3,8 @@ log4j.appender.A1=org.apache.log4j.ConsoleAppender
log4j.appender.A1.layout=org.apache.log4j.PatternLayout log4j.appender.A1.layout=org.apache.log4j.PatternLayout
# Print the date in ISO 8601 format # Print the date in ISO 8601 format
log4j.appender.A1.layout.ConversionPattern=%d [%t] %-5p %c - %m%n log4j.appender.A1.layout.ConversionPattern=[%-5p] %d %c - %m%n
# Print only messages of level TRACE or above in the package org.gcube # Print only messages of level TRACE or above in the package org.gcube
log4j.logger.org.gcube=TRACE log4j.logger.org.gcube=TRACE
log4j.logger.com.netflix.astyanax.connectionpool.impl=ERROR

View File

@ -0,0 +1,19 @@
package org.gcube.portlets.user.notifications.test;
import static org.junit.Assert.assertTrue;
import org.gcube.portlets.user.notifications.server.NotificationsServiceImpl;
import org.junit.Test;
public class TestForDeploy {
@Test
public void testUserIsTestUser() {
NotificationsServiceImpl serviceImpl = new NotificationsServiceImpl();
String username = serviceImpl.getDevelopmentUser();
System.out.println("username for deploy is: " + username);
assertTrue(username.compareTo("test.user") == 0);
System.out.println("Test OK!");
}
}