You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openmeetings.apache.org by so...@apache.org on 2013/06/07 08:25:47 UTC

svn commit: r1490517 - in /openmeetings/trunk/singlewebapp/src/org/apache/openmeetings: data/user/dao/ persistence/beans/user/ web/user/profile/ web/util/

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);
+		}
+	}
+}