Display the last login in the web client.
authorPanagiotis Astithas <pastith@gmail.com>
Fri, 16 Apr 2010 14:18:39 +0000 (17:18 +0300)
committerPanagiotis Astithas <pastith@gmail.com>
Fri, 16 Apr 2010 14:18:39 +0000 (17:18 +0300)
src/gr/ebs/gss/client/StatusPanel.java
src/gr/ebs/gss/client/rest/resource/UserResource.java
src/gr/ebs/gss/resources/xclock.png [new file with mode: 0755]
src/gr/ebs/gss/server/rest/UserHandler.java

index 7afab42..0f5fff6 100644 (file)
@@ -24,6 +24,7 @@ import gr.ebs.gss.client.rest.resource.QuotaHolder;
 import gr.ebs.gss.client.rest.resource.UserResource;\r
 \r
 import com.google.gwt.core.client.GWT;\r
+import com.google.gwt.i18n.client.DateTimeFormat;\r
 import com.google.gwt.resources.client.ClientBundle;\r
 import com.google.gwt.resources.client.ImageResource;\r
 import com.google.gwt.user.client.DeferredCommand;\r
@@ -43,6 +44,7 @@ public class StatusPanel extends Composite {
        private HTML fileSizeLabel = new HTML("");\r
        private HTML quotaIcon = new HTML("");\r
        private HTML quotaLabel = new HTML("");\r
+       private HTML lastLoginLabel = new HTML("");\r
        private HTML currentlyShowingLabel = new HTML("");\r
 \r
        /**\r
@@ -64,6 +66,9 @@ public class StatusPanel extends Composite {
 \r
                @Source("gr/ebs/gss/resources/yellowled.png")\r
                ImageResource yellowSize();\r
+\r
+               @Source("gr/ebs/gss/resources/xclock.png")\r
+               ImageResource lastLogin();\r
        }\r
 \r
        private final Images images;\r
@@ -81,9 +86,12 @@ public class StatusPanel extends Composite {
 \r
                HorizontalPanel left = new HorizontalPanel();\r
                left.setSpacing(8);\r
+               HorizontalPanel middle = new HorizontalPanel();\r
+               middle.setSpacing(8);\r
                HorizontalPanel right = new HorizontalPanel();\r
                right.setSpacing(8);\r
                outer.add(left);\r
+               outer.add(middle);\r
                outer.add(right);\r
                left.add(new HTML("<b>Totals:</b> "));\r
                left.add(AbstractImagePrototype.create(images.totalFiles()).createImage());\r
@@ -93,9 +101,13 @@ public class StatusPanel extends Composite {
                quotaIcon.setHTML(AbstractImagePrototype.create(images.greenSize()).getHTML());\r
                left.add(quotaIcon);\r
                left.add(quotaLabel);\r
+               middle.add(AbstractImagePrototype.create(images.lastLogin()).createImage());\r
+               middle.add(new HTML("<b>Last login:</b> "));\r
+               middle.add(lastLoginLabel);\r
                right.add(currentlyShowingLabel);\r
                outer.setStyleName("statusbar-inner");\r
                left.setStyleName("statusbar-inner");\r
+               middle.setStyleName("statusbar-inner");\r
                right.setStyleName("statusbar-inner");\r
                outer.setCellHorizontalAlignment(right, HasHorizontalAlignment.ALIGN_RIGHT);\r
 \r
@@ -108,7 +120,7 @@ public class StatusPanel extends Composite {
                                UserResource user = app.getCurrentUserResource();\r
                                if (user == null || app.getFolders().getRootItem() == null)\r
                                        return !DONE;\r
-                               displayStats(user.getQuota());\r
+                               displayStats(user);\r
                                return DONE;\r
                        }\r
                });\r
@@ -117,7 +129,8 @@ public class StatusPanel extends Composite {
        /**\r
         * Refresh the widget with the provided statistics.\r
         */\r
-       private void displayStats(QuotaHolder stats) {\r
+       private void displayStats(UserResource user) {\r
+               QuotaHolder stats = user.getQuota();\r
                if (stats.getFileCount() == 1)\r
                        fileCountLabel.setHTML("1 file");\r
                else\r
@@ -134,6 +147,8 @@ public class StatusPanel extends Composite {
                        quotaIcon.setHTML(AbstractImagePrototype.create(images.greenSize()).getHTML());\r
                        quotaLabel.setHTML(stats.getQuotaLeftAsString() +" free");\r
                }\r
+               final DateTimeFormat formatter = DateTimeFormat.getFormat("d/M/yyyy h:mm a");\r
+               lastLoginLabel.setHTML(formatter.format(user.getLastLogin()));\r
        }\r
 \r
        /**\r
@@ -146,7 +161,7 @@ public class StatusPanel extends Composite {
                GetCommand<UserResource> uc = new GetCommand<UserResource>(UserResource.class, user.getUri(), null){\r
                        @Override\r
                        public void onComplete() {\r
-                               displayStats(getResult().getQuota());\r
+                               displayStats(getResult());\r
                        }\r
 \r
                        @Override\r
index bedb2fa..70f9d55 100644 (file)
@@ -58,6 +58,8 @@ public class UserResource extends RestResource {
 
        private String announcement;
 
+       private Date lastLogin;
+
        /**
         * Retrieve the name.
         *
@@ -284,7 +286,6 @@ public class UserResource extends RestResource {
                return announcement;
        }
 
-
        /**
         * Modify the announcement.
         *
@@ -294,6 +295,15 @@ public class UserResource extends RestResource {
                announcement = anAnnouncement;
        }
 
+       /**
+        * Retrieve the lastLogin.
+        *
+        * @return the lastLogin
+        */
+       public Date getLastLogin() {
+               return lastLogin;
+       }
+
        @Override
        public void createFromJSON(String text) {
                JSONObject json = (JSONObject) JSONParser.parse(text);
@@ -307,6 +317,8 @@ public class UserResource extends RestResource {
                tagsPath = unmarshallString(json, "tags");
                trashPath = unmarshallString(json, "trash");
                announcement = unmarshallString(json, "announcement");
+               if (json.get("lastLogin") != null)
+                       lastLogin = new Date(new Long(json.get("lastLogin").toString()));
                if (json.get("creationDate") != null)
                        creationDate = new Date(new Long(json.get("creationDate").toString()));
                if (json.get("modificationDate") != null)
diff --git a/src/gr/ebs/gss/resources/xclock.png b/src/gr/ebs/gss/resources/xclock.png
new file mode 100755 (executable)
index 0000000..31e66e4
Binary files /dev/null and b/src/gr/ebs/gss/resources/xclock.png differ
index 0b17e77..f5bed77 100644 (file)
@@ -89,8 +89,10 @@ public class UserHandler extends RequestHandler {
                                        put("shared", parentUrl + PATH_SHARED).put("others", parentUrl + PATH_OTHERS).
                                        put("quota", statistics).put("tags", parentUrl + PATH_TAGS);
                        String announcement = getConfiguration().getString("announcement");
-                       if(announcement != null && !announcement.isEmpty())
+                       if (announcement != null && !announcement.isEmpty())
                                json.put("announcement", announcement);
+                       if (owner.getLastLogin() != null)
+                               json.put("lastLogin", owner.getLastLogin().getTime());
                } catch (JSONException e) {
                        logger.error("", e);
                        resp.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);