Sent invitations along with status are shown in the invitation dialog
authorChristos Stathis <chstath@ebs.gr>
Thu, 24 Nov 2011 15:11:12 +0000 (17:11 +0200)
committerChristos Stathis <chstath@ebs.gr>
Thu, 24 Nov 2011 15:11:12 +0000 (17:11 +0200)
src/gr/grnet/pithos/web/client/Invitation.java [new file with mode: 0644]
src/gr/grnet/pithos/web/client/Invitations.java
src/gr/grnet/pithos/web/client/InvitationsDialog.java
src/gr/grnet/pithos/web/public/images/invitation_accepted.png [new file with mode: 0644]
src/gr/grnet/pithos/web/public/images/resend.png [new file with mode: 0644]
src/gr/grnet/pithos/web/public/pithos.css

diff --git a/src/gr/grnet/pithos/web/client/Invitation.java b/src/gr/grnet/pithos/web/client/Invitation.java
new file mode 100644 (file)
index 0000000..010d8ca
--- /dev/null
@@ -0,0 +1,25 @@
+package gr.grnet.pithos.web.client;
+
+public class Invitation {
+       private boolean accepted;
+       private String realname;
+       private String email;
+       
+       public Invitation(boolean accepted, String realname, String email) {
+               this.accepted = accepted;
+               this.realname = realname;
+               this.email = email;
+       }
+
+       public boolean isAccepted() {
+               return accepted;
+       }
+
+       public String getRealname() {
+               return realname;
+       }
+
+       public String getEmail() {
+               return email;
+       }
+}
index 1f71f3c..6354fbd 100644 (file)
@@ -1,8 +1,11 @@
 package gr.grnet.pithos.web.client;
 
+import java.util.ArrayList;
 import java.util.Date;
+import java.util.List;
 
 import com.google.gwt.http.client.Response;
+import com.google.gwt.json.client.JSONArray;
 import com.google.gwt.json.client.JSONObject;
 import com.google.gwt.json.client.JSONParser;
 import com.google.gwt.json.client.JSONValue;
@@ -13,6 +16,8 @@ public class Invitations extends Resource {
 
        private int invitationsLeft = 0;
        
+       private List<Invitation> sentInvitations = new ArrayList<Invitation>();
+       
        @Override
        public Date getLastModified() {
                return null;
@@ -22,10 +27,6 @@ public class Invitations extends Resource {
                return invitationsLeft;
        }
 
-       public void setInvitationsLeft(int invitationsLeft) {
-               this.invitationsLeft = invitationsLeft;
-       }
-
        public static Invitations createFromResponse(Response response) {
                Invitations result = new Invitations();
                result.populate(response);
@@ -35,8 +36,26 @@ public class Invitations extends Resource {
        private void populate(Response response) {
         JSONValue json = JSONParser.parseStrict(response.getText());
         JSONObject o = json.isObject();
-        if (o != null)
+        if (o != null) {
                invitationsLeft = unmarshallInt(o, "invitations");
+               JSONArray sent = o.get("sent").isArray();
+               if (sent != null) {
+                       for (int i=0; i<sent.size(); i++) {
+                               JSONObject ob = sent.get(i).isObject();
+                               if (ob != null) {
+                                       boolean accepted = unmarshallBoolean(ob, "is_accepted");
+                                       String email = unmarshallString(ob, "email");
+                                       String realname = unmarshallString(ob, "realname");
+                                       Invitation inv = new Invitation(accepted, realname, email);
+                                       sentInvitations.add(inv);
+                               }
+                       }
+               }
+        }
+       }
+
+       public List<Invitation> getSentInvitations() {
+               return sentInvitations;
        }
 
 }
index f72ad3b..5177b2d 100644 (file)
@@ -52,6 +52,7 @@ import com.google.gwt.user.client.ui.FlexTable;
 import com.google.gwt.user.client.ui.HTML;
 import com.google.gwt.user.client.ui.HasHorizontalAlignment;
 import com.google.gwt.user.client.ui.HorizontalPanel;
+import com.google.gwt.user.client.ui.Image;
 import com.google.gwt.user.client.ui.TextBox;
 import com.google.gwt.user.client.ui.VerticalPanel;
 
@@ -97,6 +98,7 @@ public class InvitationsDialog extends DialogBox {
                text.setStyleName("pithos-credentialsText");
                text.setWidth(WIDTH_TEXT);
                inner.add(text);
+               
                FlexTable table = new FlexTable();
                if (inv.getInvitationsLeft() > 0) {
                        table.setText(0, 0, "Name");
@@ -121,12 +123,54 @@ public class InvitationsDialog extends DialogBox {
                Button confirm = new Button("Send", new ClickHandler() {
                        @Override
                        public void onClick(ClickEvent event) {
-                               sendInvitation();
+                               sendInvitation(emailBox.getText().trim(), name.getText().trim());
                        }
                });
                confirm.addStyleName("button");
                confirm.setVisible(inv.getInvitationsLeft() > 0);
                inner.add(confirm);
+
+               HTML sentLabel = new HTML("Sent invitations");
+               sentLabel.addStyleName("pithos-sentInvitationsTitle");
+               inner.add(sentLabel);
+               
+               FlexTable sentInvitationsTable = new FlexTable();
+               Image accepted = new Image("images/invitation_accepted.png");
+               accepted.setAltText("Invitation accepted");
+               Image resend = new Image("images/resend.png");
+               resend.setAltText("Resend invitation");
+               
+               HorizontalPanel legend = new HorizontalPanel();
+               legend.add(new HTML("("));
+               legend.add(accepted);
+               legend.add(new HTML(" = Invitation has been accepted)"));
+               legend.add(new HTML("("));
+               legend.add(resend);
+               legend.add(new HTML(" = Send invitation again)"));
+               inner.add(legend);
+               
+               int row = 0;
+               for (final Invitation i : inv.getSentInvitations()) {
+                       sentInvitationsTable.setText(row, 0, i.getRealname());
+                       sentInvitationsTable.setText(row, 1, i.getEmail());
+                       if (i.isAccepted())
+                               sentInvitationsTable.setWidget(row, 2, new Image("images/invitation_accepted.png"));
+                       else {
+                               Image img = new Image("images/resend.png");
+                               img.addStyleName("pithos-resendInvitation");
+                               img.addClickHandler(new ClickHandler() {
+                                       
+                                       @Override
+                                       public void onClick(ClickEvent event) {
+                                               sendInvitation(i.getEmail(), i.getRealname());
+                                       }
+                               });
+                               sentInvitationsTable.setWidget(row, 2, img);
+                       }
+                       row++;
+               }
+               inner.add(sentInvitationsTable);
+               
                outer.add(inner);
                outer.setCellHorizontalAlignment(inner, HasHorizontalAlignment.ALIGN_CENTER);
                setWidget(outer);
@@ -141,7 +185,7 @@ public class InvitationsDialog extends DialogBox {
                        // either enter or escape is pressed.
                        switch (evt.getKeyCode()) {
                                case KeyCodes.KEY_ENTER:
-                                       sendInvitation();
+                                       sendInvitation(emailBox.getText().trim(), name.getText().trim());
                                        break;
                                case KeyCodes.KEY_ESCAPE:
                                        hide();
@@ -149,8 +193,8 @@ public class InvitationsDialog extends DialogBox {
                        }
        }
 
-       void sendInvitation() {
-               PostRequest sendInvitation = new PostRequest("/im/", "", "invite", "uniq=" + emailBox.getText().trim() + "&realname=" + name.getText().trim()) {
+       void sendInvitation(String email, String realname) {
+               PostRequest sendInvitation = new PostRequest("/im/", "", "invite", "uniq=" + email + "&realname=" + realname) {
                        
                        @Override
                        protected void onUnauthorized(Response response) {
diff --git a/src/gr/grnet/pithos/web/public/images/invitation_accepted.png b/src/gr/grnet/pithos/web/public/images/invitation_accepted.png
new file mode 100644 (file)
index 0000000..7c9a901
Binary files /dev/null and b/src/gr/grnet/pithos/web/public/images/invitation_accepted.png differ
diff --git a/src/gr/grnet/pithos/web/public/images/resend.png b/src/gr/grnet/pithos/web/public/images/resend.png
new file mode 100644 (file)
index 0000000..3478390
Binary files /dev/null and b/src/gr/grnet/pithos/web/public/images/resend.png differ
index 7243cf3..f7f86ca 100644 (file)
@@ -512,4 +512,15 @@ table.pithos-permList.props-labels {
 /* fix tag color */
 a.pithos-tag {
     color: #4085a5;
+}
+
+.pithos-sentInvitationsTitle {
+       font-size: 1.2em;
+       font-weight: normal;
+       border-bottom: 1px solid #B0D0E0;
+       color: #4085A5;
+}
+
+.pithos-resendInvitation {
+       cursor: pointer;
 }
\ No newline at end of file