Author: solomax
Date: Fri Jun  7 06:25:20 2013
New Revision: 1490517

URL: http://svn.apache.org/r1490517
Log:
[OPENMEETINGS-615] new Messages forms is updated:
        1) user autocomplete + creation works (validation should still be added)
        2) UI improvements

Added:
    
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/util/UserAutoCompleteTextField.java
Modified:
    
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/data/user/dao/PrivateMessagesDao.java
    
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/persistence/beans/user/PrivateMessage.java
    
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/user/profile/MessageDialog.html
    
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/user/profile/MessageDialog.java
    
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/user/profile/MessagesContactsPanel.html
    
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/user/profile/MessagesContactsPanel.java

Modified: 
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/data/user/dao/PrivateMessagesDao.java
URL: 
http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/data/user/dao/PrivateMessagesDao.java?rev=1490517&r1=1490516&r2=1490517&view=diff
==============================================================================
--- 
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/data/user/dao/PrivateMessagesDao.java
 (original)
+++ 
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/data/user/dao/PrivateMessagesDao.java
 Fri Jun  7 06:25:20 2013
@@ -55,7 +55,7 @@ public class PrivateMessagesDao implemen
                        privateMessage.setFrom(from);
                        privateMessage.setTo(to);
                        privateMessage.setOwner(owner);
-                       privateMessage.setBookedRoom(bookedRoom);
+                       
privateMessage.setBookedRoom(Boolean.TRUE.equals(bookedRoom));
                        privateMessage.setRoom(room);
                        privateMessage.setParentMessage(parentMessageId);
                        privateMessage.setIsTrash(false);

Modified: 
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/persistence/beans/user/PrivateMessage.java
URL: 
http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/persistence/beans/user/PrivateMessage.java?rev=1490517&r1=1490516&r2=1490517&view=diff
==============================================================================
--- 
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/persistence/beans/user/PrivateMessage.java
 (original)
+++ 
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/persistence/beans/user/PrivateMessage.java
 Fri Jun  7 06:25:20 2013
@@ -112,7 +112,7 @@ public class PrivateMessage implements S
                
        @Column(name="booked_room")
        @Element(data=true)
-       private Boolean bookedRoom;
+       private boolean bookedRoom;
 
        @ManyToOne(fetch = FetchType.EAGER)
        @JoinColumn(name="rooms_id")
@@ -193,13 +193,13 @@ public class PrivateMessage implements S
                this.owner = owner;
        }
        
-       public Boolean getBookedRoom() {
+       public boolean isBookedRoom() {
                return bookedRoom;
        }
-       public void setBookedRoom(Boolean bookedRoom) {
+       public void setBookedRoom(boolean bookedRoom) {
                this.bookedRoom = bookedRoom;
        }
-
+       
        public Room getRoom() {
                return room;
        }

Modified: 
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/user/profile/MessageDialog.html
URL: 
http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/user/profile/MessageDialog.html?rev=1490517&r1=1490516&r2=1490517&view=diff
==============================================================================
--- 
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/user/profile/MessageDialog.html
 (original)
+++ 
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/user/profile/MessageDialog.html
 Fri Jun  7 06:25:20 2013
@@ -41,7 +41,7 @@
                                <td colspan="2"><textarea class="messages body" 
wicket:id="message" ></textarea></td>
                        </tr>
                        <tr>
-                               <td colspan="2"><input type="checkbox" 
wicket:id="room" /><label wicket:for="room"><wicket:ommessage 
key="1218"/></label></td>
+                               <td colspan="2"><input type="checkbox" 
wicket:id="bookedRoom" /><label wicket:for="bookedRoom"><wicket:ommessage 
key="1218"/></label></td>
                        </tr>
                        <tr wicket:id="roomParamsBlock">
                                <td colspan="2" wicket:id="roomParams">
@@ -51,15 +51,15 @@
                                                                <table>
                                                                        <tr>
                                                                                
<td><wicket:ommessage key="194"/></td>
-                                                                               
<td><select class="messages selector" wicket:id="roomType"></select></td>
+                                                                               
<td><select class="messages selector" wicket:id="room.roomtype"></select></td>
                                                                        </tr>
                                                                        <tr>
                                                                                
<td><wicket:ommessage key="570" /></td>
-                                                                               
<td><span wicket:id="start"></span></td>
+                                                                               
<td><span type="text" wicket:id="start"></span></td>
                                                                        </tr>
                                                                        <tr>
                                                                                
<td><wicket:ommessage key="571" /></td>
-                                                                               
<td><span wicket:id="end"></span></td>
+                                                                               
<td><span type="text" wicket:id="end"></span></td>
                                                                        </tr>
                                                                </table>
                                                        </td>

Modified: 
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/user/profile/MessageDialog.java
URL: 
http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/user/profile/MessageDialog.java?rev=1490517&r1=1490516&r2=1490517&view=diff
==============================================================================
--- 
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/user/profile/MessageDialog.java
 (original)
+++ 
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/user/profile/MessageDialog.java
 Fri Jun  7 06:25:20 2013
@@ -18,28 +18,29 @@
  */
 package org.apache.openmeetings.web.user.profile;
 
-import static org.apache.openmeetings.web.app.Application.getBean;
+import static org.apache.openmeetings.web.util.RoomTypeDropDown.getRoomTypes;
 
 import java.util.Arrays;
+import java.util.Date;
 import java.util.List;
 
-import org.apache.openmeetings.data.user.dao.UsersDao;
+import org.apache.openmeetings.persistence.beans.room.Room;
 import org.apache.openmeetings.persistence.beans.user.PrivateMessage;
-import org.apache.openmeetings.persistence.beans.user.User;
 import org.apache.openmeetings.web.app.WebSession;
 import org.apache.openmeetings.web.util.RoomTypeDropDown;
+import org.apache.openmeetings.web.util.UserAutoCompleteTextField;
 import org.apache.wicket.ajax.AjaxEventBehavior;
 import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.extensions.yui.calendar.DateTimeField;
 import org.apache.wicket.markup.html.WebMarkupContainer;
 import org.apache.wicket.markup.html.form.CheckBox;
 import org.apache.wicket.markup.html.form.Form;
 import org.apache.wicket.markup.html.form.TextArea;
 import org.apache.wicket.markup.html.form.TextField;
+import org.apache.wicket.model.CompoundPropertyModel;
 import org.apache.wicket.model.IModel;
 import org.apache.wicket.model.Model;
 
-import com.googlecode.wicket.jquery.core.renderer.ITextRenderer;
-import com.googlecode.wicket.jquery.ui.form.autocomplete.AutoCompleteTextField;
 import com.googlecode.wicket.jquery.ui.widget.dialog.AbstractFormDialog;
 import com.googlecode.wicket.jquery.ui.widget.dialog.DialogButton;
 
@@ -50,42 +51,55 @@ public class MessageDialog extends Abstr
        private DialogButton cancel = new 
DialogButton(WebSession.getString(219));
        private final WebMarkupContainer roomParamsBlock = new 
WebMarkupContainer("roomParamsBlock");
        private final WebMarkupContainer roomParams = new 
WebMarkupContainer("roomParams");
+       private final IModel<Date> modelStart = Model.of(new Date());
+       private final IModel<Date> modelEnd = Model.of(new Date());
 
        @Override
        public int getWidth() {
                return 650;
        }
        
-       public MessageDialog(String id, IModel<PrivateMessage> model) {
+       @Override
+       protected void onOpen(AjaxRequestTarget target) {
+               modelStart.setObject(new Date());
+               modelEnd.setObject(new Date()); //TODO should we add 1 hour or 
generalize with Calendar???
+               PrivateMessage p = new PrivateMessage();
+               Room r = new Room();
+               r.setAppointment(true);
+               r.setRoomtype(getRoomTypes().get(0));
+               p.setRoom(r);
+               setModelObject(p);
+               roomParams.setVisible(getModelObject().isBookedRoom());
+               form.setModelObject(p);
+               target.add(form);
+               super.onOpen(target);
+       }
+       
+       public MessageDialog(String id, CompoundPropertyModel<PrivateMessage> 
model) {
                super(id, WebSession.getString(1209), model);
                form = new Form<PrivateMessage>("form", getModel());
                
-               form.add(new AutoCompleteTextField<User>("to", new 
UserTextRenderer()) {
-                       private static final long serialVersionUID = 1L;
-
-                       @Override
-                       protected List<User> getChoices(String input) {
-                               return getBean(UsersDao.class).get(input, 0, 
10, null);
-                       }
-               });
+               form.add(new UserAutoCompleteTextField("to"));
                form.add(new TextField<String>("subject"));
                form.add(new TextArea<String>("message"));
                form.add(roomParamsBlock.setOutputMarkupId(true));
-               form.add(new CheckBox("room", 
Model.of(getModelObject().getRoom() != null)).add(new 
AjaxEventBehavior("click") {
+               final CheckBox bookedRoom = new CheckBox("bookedRoom");
+               form.add(bookedRoom.setOutputMarkupId(true).add(new 
AjaxEventBehavior("click") {
                        private static final long serialVersionUID = 1L;
-                       boolean val = false;
                        
                        @Override
                        protected void onEvent(AjaxRequestTarget target) {
-                               roomParams.setVisible(val = !val);
-                               target.add(roomParamsBlock);
+                               PrivateMessage p = 
MessageDialog.this.getModelObject();
+                               p.setBookedRoom(!p.isBookedRoom());
+                               roomParams.setVisible(p.isBookedRoom());
+                               target.add(bookedRoom, roomParamsBlock);
                        }
                }));
                roomParamsBlock.add(roomParams);
-               roomParams.add(new RoomTypeDropDown("roomType"));
-               roomParams.add(new WebMarkupContainer("start"));
-               roomParams.add(new WebMarkupContainer("end"));
-               add(form);
+               roomParams.add(new RoomTypeDropDown("room.roomtype"));
+               roomParams.add(new DateTimeField("start", modelStart));
+               roomParams.add(new DateTimeField("end", modelEnd));
+               add(form.setOutputMarkupId(true));
        }
 
        @Override
@@ -114,16 +128,4 @@ public class MessageDialog extends Abstr
                // TODO Auto-generated method stub
 
        }
-
-       private static class UserTextRenderer implements ITextRenderer<User> {
-               private static final long serialVersionUID = 1L;
-
-               public String getText(User u) {
-                       return u == null ? "" : String.format("%s %s <%s>", 
u.getFirstname(), u.getLastname(), u.getAdresses().getEmail());
-               }
-               
-               public String getText(User u, String expression) {
-                       return getText(u);
-               }
-       }
 }

Modified: 
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/user/profile/MessagesContactsPanel.html
URL: 
http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/user/profile/MessagesContactsPanel.html?rev=1490517&r1=1490516&r2=1490517&view=diff
==============================================================================
--- 
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/user/profile/MessagesContactsPanel.html
 (original)
+++ 
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/user/profile/MessagesContactsPanel.html
 Fri Jun  7 06:25:20 2013
@@ -40,7 +40,7 @@
                                <div wicket:id="container">
                                        <div><b><wicket:ommessage 
key="1206"/>&nbsp;(<span wicket:id="unread"></span>)</b></div>
                                        <div wicket:id="navigator"></div>
-                                       <table style="width: 100%;">
+                                       <table id="messagesTable" style="width: 
100%;">
                                                <thead>
                                                <tr>
                                                        <th><span 
wicket:id="orderById"></span><wicket:ommessage key="1205"/></th>

Modified: 
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/user/profile/MessagesContactsPanel.java
URL: 
http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/user/profile/MessagesContactsPanel.java?rev=1490517&r1=1490516&r2=1490517&view=diff
==============================================================================
--- 
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/user/profile/MessagesContactsPanel.java
 (original)
+++ 
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/user/profile/MessagesContactsPanel.java
 Fri Jun  7 06:25:20 2013
@@ -49,12 +49,14 @@ import org.apache.wicket.markup.html.bas
 import org.apache.wicket.markup.html.list.ListItem;
 import org.apache.wicket.markup.html.list.ListView;
 import org.apache.wicket.markup.repeater.Item;
+import org.apache.wicket.model.CompoundPropertyModel;
 import org.apache.wicket.model.IModel;
 import org.apache.wicket.model.Model;
 
 import ro.fortsoft.wicket.dashboard.web.util.ConfirmAjaxCallListener;
 
 import com.googlecode.wicket.jquery.core.JQueryBehavior;
+//TODO not released yet import 
com.googlecode.wicket.jquery.ui.plugins.fixedheadertable.FixedHeaderTableBehavior;
 
 public class MessagesContactsPanel extends UserPanel {
        private static final long serialVersionUID = 8098087441571734957L;
@@ -69,7 +71,7 @@ public class MessagesContactsPanel exten
        private final WebMarkupContainer inbox = new 
WebMarkupContainer("inbox");
        private final WebMarkupContainer sent = new WebMarkupContainer("sent");
        private final WebMarkupContainer trash = new 
WebMarkupContainer("trash");
-       private final MessageDialog newMessage = new 
MessageDialog("newMessage", Model.of(new PrivateMessage()));
+       private final MessageDialog newMessage = new 
MessageDialog("newMessage", new CompoundPropertyModel<PrivateMessage>(new 
PrivateMessage()));
        
        private void setDefaultFolderClass() {
                inbox.add(AttributeAppender.replace("class", "email inbox 
clickable"));
@@ -92,6 +94,7 @@ public class MessagesContactsPanel exten
                selectedModel.setObject(id);
                setDefaultFolderClass();
                selectFolder(folder);
+               //TODO not released yet container.add(new 
FixedHeaderTableBehavior("#messagesTable", new Options("height", 100)));
                if (target != null) {
                        target.add(folders, container);
                }
@@ -127,7 +130,6 @@ public class MessagesContactsPanel exten
 
                        @Override
                        protected void onEvent(AjaxRequestTarget target) {
-                               newMessage.setModelObject(new PrivateMessage());
                                newMessage.open(target);
                        }
                }).add(new JQueryBehavior(".email.new", "button")));

Added: 
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/util/UserAutoCompleteTextField.java
URL: 
http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/util/UserAutoCompleteTextField.java?rev=1490517&view=auto
==============================================================================
--- 
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/util/UserAutoCompleteTextField.java
 (added)
+++ 
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/util/UserAutoCompleteTextField.java
 Fri Jun  7 06:25:20 2013
@@ -0,0 +1,90 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.util;
+
+import static org.apache.openmeetings.web.app.Application.getBean;
+
+import java.util.List;
+import java.util.Locale;
+
+import org.apache.openmeetings.data.user.dao.UsersDao;
+import org.apache.openmeetings.persistence.beans.user.Address;
+import org.apache.openmeetings.persistence.beans.user.User;
+import org.apache.openmeetings.persistence.beans.user.User.Type;
+import org.apache.wicket.util.convert.IConverter;
+
+import com.googlecode.wicket.jquery.core.renderer.ITextRenderer;
+import com.googlecode.wicket.jquery.ui.form.autocomplete.AutoCompleteTextField;
+
+public class UserAutoCompleteTextField extends AutoCompleteTextField<User> {
+       private static final long serialVersionUID = 1L;
+       private UserTextRenderer renderer;
+       private IConverter<User> converter = new IConverter<User>() {
+               private static final long serialVersionUID = 1L;
+
+               public User convertToObject(String value, Locale locale) {
+                       if (value != null && 
value.equals(UserAutoCompleteTextField.this.getModelValue()))  {
+                               return 
UserAutoCompleteTextField.this.getModelObject();
+                       } else {
+                               //TODO validate input !!!!!!!!!!!!!!!!!
+                               User u = new User();
+                               u.setType(Type.contact);
+                               u.setAdresses(new Address());
+                               u.getAdresses().setEmail(value);
+                               return u;
+                       }
+               }
+
+               public String convertToString(User value, Locale locale) {
+                       return 
UserAutoCompleteTextField.this.renderer.getText(value);
+               }
+       };
+
+       public UserAutoCompleteTextField(String id) {
+               super(id, new UserTextRenderer());
+               this.renderer = new UserTextRenderer(); //FIXME ugly
+       }
+
+       @SuppressWarnings("unchecked")
+       @Override
+       public <C> IConverter<C> getConverter(Class<C> type) {
+               if (type.isAssignableFrom(User.class)) {
+                       return (IConverter<C>)converter;
+               } else {
+                       return super.getConverter(type);
+               }
+       }
+       
+       @Override
+       protected List<User> getChoices(String input) {
+               return getBean(UsersDao.class).get(input, 0, 10, null);
+       }
+       
+       private static class UserTextRenderer implements ITextRenderer<User> {
+               private static final long serialVersionUID = 1L;
+
+               public String getText(User u) {
+                       return u == null ? "" : String.format("%s %s <%s>", 
u.getFirstname(), u.getLastname(), u.getAdresses().getEmail());
+               }
+               
+               public String getText(User u, String expression) {
+                       return getText(u);
+               }
+       }
+}


Reply via email to