If I remember correctly I have added RoomClient to the DB since I need
mechanism to retrieve how much users are currently in the room.

On Mon, Oct 22, 2012 at 3:23 PM, [email protected] <
[email protected]> wrote:

> We could even store it currently in the IConnection. The Red5 framework
> has the similar mechanism like the static Map that I've build.
>
> We will also stay with our Red5 implementation for the next 6 months as we
> have no alternative to stream audio/video in HTML5.
>
> It is no option to stay with it, how can we offer OpenMeetings to be
> scalable to 1000 concurrent users? We would have to limit it to 250. Also
> it would become mandatory to have the database server on the same machine
> as the red5 server. Otherwise you have performance bottlenecks. Can you
> imagine what kind of negative public feedback we will have if every
> question about performance of red5 is answered with: Did you install db
> server on another instance of your network?
>
> Sorry but it is not possible. Also not for a temporary solution. We can't
> sell this product like that and claim to have 1000 user sessions per server
> unit.
>
> What requirements do exist to store the RoomClient in the database and
> what is needed to be done to remove it from the db again?
>
>
> Sebastian
>
> 2012/10/22 Maxim Solodovnik <[email protected]>
>
>> OK, I'm not insist. I believe RoomClient will be removed in the future.
>>
>>
>> On Mon, Oct 22, 2012 at 3:00 PM, [email protected] <
>> [email protected]> wrote:
>>
>>> Sorry but:
>>>
>>> for (RoomClient rc: allClient) {
>>>    if (rc.getPublicSID().equals(_publicSID) {
>>>       return rc;
>>>    }
>>> }
>>>
>>> That is simply not true.
>>> There are _some_ implementations where it was needed that you need to
>>> get the RoomClient by its public SID. However this usage was quite limited.
>>>
>>> In general it was the way I described it:
>>> The maps key was the streamid. And the streamid was obtained from the
>>> IConnection of each stream.
>>>
>>>
>>> http://svn.apache.org/viewvc/incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/remote/red5/ClientListManager.java?revision=1339514&view=markup
>>> Line 118, that was the function that was mainly in use all over the
>>> application.
>>> There is no sorting, there is no iteration => nothing.
>>>
>>> Search in the ScopeApplicationAdapter for "getClientByStreamId" => 52 of
>>> matches.
>>> Every of this call is now replaced by a single DB query.
>>> And if you iterate like described through all connection (like it is in
>>> EVERY snyc method)
>>> You will do a single query for EVERY connection.
>>> Like 100 users in a room => 100 queries.
>>> Think about the green dot that blinks every time you speak in the video
>>> pod:
>>> If it gets visible => one sync message
>>> If its get transparent => one sync message.
>>> If you have a quite good and sensitive micro it will flush 10 mabye 10
>>> times per second.
>>> per 100 users in a room => 10 * 100 = 1000 queries in a SINGLE SECOND
>>> => that is just impossible !!
>>> And that is just a SINGLE videopod with 100 users watching. Now scale
>>> that up to 1000 concurrent rooms with  4x4 meetings where every user has
>>> micro turned on ?! Should we calc the number of database queries really?!
>>>
>>> Sorry we will not follow that route :)
>>>
>>> Sebastian
>>>
>>> 2012/10/22 Maxim Solodovnik <[email protected]>
>>>
>>>> Previous solution was:
>>>>
>>>> for (RoomClient rc: allClient) {
>>>>    if (rc.getPublicSID().equals(_publicSID) {
>>>>       return rc;
>>>>    }
>>>> }
>>>>
>>>> + screen sharing clients were filtered same way.
>>>> Right now we can filter all sessions with 1 query this is why the code
>>>> can work faster (after minor changes in iterating logic)
>>>>
>>>> I'm not insist RoomClient should be DB object. But having it as DB
>>>> object was the only option to have user count in the room (in case Rooms
>>>> are on the different servers).
>>>>
>>>> I believe right now org.apache.openmeetings.web.app.WebSession will be
>>>> session object.
>>>> I hope everything except audio and video will move to Wicket :)
>>>>
>>>>
>>>> On Mon, Oct 22, 2012 at 2:33 PM, [email protected] <
>>>> [email protected]> wrote:
>>>>
>>>>> Hi Maxim,
>>>>>
>>>>> you can't persist on the argumentation that a HashMap stored in the
>>>>> memory is slower then doing a single query for every entry of the map ?
>>>>> Basicaly the previous implementation was a single HashMap.
>>>>> Getting a RoomClient from this map was:
>>>>> map.get($streamId)
>>>>> and now this single line is replaced by a Database query. The
>>>>> performance of this single line  is ... I guess smaller then 1 
>>>>> millisecond.
>>>>> How can you say that a "Right now I think the current code should work
>>>>> faster or the same as previous one." :)
>>>>>
>>>>> I guess you had some other requirements that made you implement this.
>>>>> For example for the clustering solution.
>>>>> However I also persist on my view:
>>>>> A database is _not_ the right place for storing session variables.
>>>>> This is simply a bad design decision that will cost a lot of performance 
>>>>> in
>>>>> the future.
>>>>>
>>>>> Could you explain why there is a need for having the RoomClient in the
>>>>> database? Maybe we can resolve those requirements differently so that we
>>>>> can have the RoomClient back in memory.
>>>>>
>>>>> Sebastian
>>>>>
>>>>>
>>>>> 2012/10/19 Maxim Solodovnik <[email protected]>
>>>>>
>>>>>> Sorry for double post.
>>>>>>
>>>>>> Correct me if I'm wrong, but i think "Transient for XML
>>>>>> export/import" is not necessary since it doesn't have @Element annotation
>>>>>> On Oct 19, 2012 9:59 PM, "Maxim Solodovnik" <[email protected]>
>>>>>> wrote:
>>>>>>
>>>>>>> RoomClient was mooved to the DB while I implemented cluster.
>>>>>>> Current changes only make the calls faster (since DB is quered only
>>>>>>> once)
>>>>>>>
>>>>>>> I'll try to create couple of tests. Right now I think the current
>>>>>>> code should work faster or the same as previous one.
>>>>>>>
>>>>>>> Old code did lots of full filterings of RommsClient hash map to get
>>>>>>> subset required.
>>>>>>>
>>>>>>> I tests will show I'm wrong on this I'll try to tune up openjpa
>>>>>>> cache and if it doesn't help will split RoomClient to the couple of 
>>>>>>> objects
>>>>>>> and/or will create hashtable in parallel to speed up things.
>>>>>>>
>>>>>>> But I hope everything is not so slow since these changes are present
>>>>>>> in 2.0 and nobody reports performance degradation.
>>>>>>>
>>>>>>> Sorry for typos, I'm from mobile phone
>>>>>>> On Oct 19, 2012 9:11 PM, "[email protected]" <
>>>>>>> [email protected]> wrote:
>>>>>>>
>>>>>>>> I guess this happened lately in trunk.
>>>>>>>> How are we the in the future planning to determine the current
>>>>>>>> users in the room.
>>>>>>>> Session or database based?
>>>>>>>>
>>>>>>>> I ask that critical as some queries require to sync messages to all
>>>>>>>> clients of a room.
>>>>>>>> This can happen 1000 times in a single second if you think about
>>>>>>>> having up to 1000 concurrent user sessions.
>>>>>>>>
>>>>>>>> For example:
>>>>>>>> ScopeApplicationAdapter::syncMessageToCurrentScope(String
>>>>>>>> remoteMethodName, Object newMessage, boolean sendSelf, boolean 
>>>>>>>> sendScreen)
>>>>>>>> => Collection<Set<IConnection>> conCollection = current.getScope()
>>>>>>>>                     .getConnections();
>>>>>>>> ==> iterates through all connection of the scope.
>>>>>>>>
>>>>>>>> Now the new thing is that for every connection you will create a
>>>>>>>> query for the RoomClient Object.
>>>>>>>> This is simply impossible.
>>>>>>>>
>>>>>>>> We want to scale up to 1000 concurrent user sessions and more.
>>>>>>>> The RoomClient is a typical Session object and it should stay in
>>>>>>>> the session.
>>>>>>>> It is the same issue like with the WhiteboardObject.
>>>>>>>> We are making a real time application, there is no chance to run
>>>>>>>> queries in sync methods.
>>>>>>>>
>>>>>>>> Can we find some consens here? I know you must have refactored
>>>>>>>> already a lot but I strictly did implement zero db related stuff in 
>>>>>>>> sync
>>>>>>>> methods.
>>>>>>>>
>>>>>>>> There might be a chance for some events to trigger db
>>>>>>>> actions.However I don't think having two times the RoomClient stored 
>>>>>>>> (one
>>>>>>>> time session, second time database) makes sense.
>>>>>>>>
>>>>>>>> What are you thoughts on this?
>>>>>>>>
>>>>>>>> Sebastian
>>>>>>>>
>>>>>>>> 2012/10/19 [email protected] <[email protected]>
>>>>>>>>
>>>>>>>>> Hi Maxim,
>>>>>>>>>
>>>>>>>>> I don't understand this new code in the Rooms Entity:
>>>>>>>>>     @OneToMany(fetch = FetchType.LAZY)
>>>>>>>>>
>>>>>>>>>     @JoinColumn(name = "room_id")
>>>>>>>>>     private List<RoomClient> currentusers;
>>>>>>>>>
>>>>>>>>> We calc the current users online by iterating through the Red5
>>>>>>>>> Connections.
>>>>>>>>> In which OpenMeetings version was it changed?
>>>>>>>>>
>>>>>>>>> I guess you can set it Transient for XML export/import. So maybe
>>>>>>>>> annotate it with:
>>>>>>>>> @org.simpleframework.xml.Transient
>>>>>>>>> same like roomOrganisations.
>>>>>>>>>
>>>>>>>>> Sebastian
>>>>>>>>>
>>>>>>>>> 2012/10/19 <[email protected]>
>>>>>>>>>
>>>>>>>>>  Author: solomax
>>>>>>>>>> Date: Fri Oct 19 12:39:38 2012
>>>>>>>>>> New Revision: 1400075
>>>>>>>>>>
>>>>>>>>>> URL: http://svn.apache.org/viewvc?rev=1400075&view=rev
>>>>>>>>>> Log:
>>>>>>>>>> Wicket: calendar form is improved
>>>>>>>>>>
>>>>>>>>>> Modified:
>>>>>>>>>>
>>>>>>>>>> incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/data/conference/RoomDAO.java
>>>>>>>>>>
>>>>>>>>>> incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/persistence/beans/rooms/Rooms.java
>>>>>>>>>>
>>>>>>>>>> incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/components/user/calendar/CalendarForm.java
>>>>>>>>>>
>>>>>>>>>> incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/components/user/calendar/CalendarPanel.html
>>>>>>>>>>
>>>>>>>>>> incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/components/user/calendar/CalendarPanel.java
>>>>>>>>>>
>>>>>>>>>> Modified:
>>>>>>>>>> incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/data/conference/RoomDAO.java
>>>>>>>>>> URL:
>>>>>>>>>> http://svn.apache.org/viewvc/incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/data/conference/RoomDAO.java?rev=1400075&r1=1400074&r2=1400075&view=diff
>>>>>>>>>>
>>>>>>>>>> ==============================================================================
>>>>>>>>>> ---
>>>>>>>>>> incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/data/conference/RoomDAO.java
>>>>>>>>>> (original)
>>>>>>>>>> +++
>>>>>>>>>> incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/data/conference/RoomDAO.java
>>>>>>>>>> Fri Oct 19 12:39:38 2012
>>>>>>>>>> @@ -76,6 +76,24 @@ public class RoomDAO implements OmDAO<Ro
>>>>>>>>>>                 return q.getSingleResult();
>>>>>>>>>>         }
>>>>>>>>>>
>>>>>>>>>> +       public List<Rooms> getPublicRooms() {
>>>>>>>>>> +               //TypedQuery<Rooms> q =
>>>>>>>>>> em.createNamedQuery("getNondeletedRooms", Rooms.class);
>>>>>>>>>> +               TypedQuery<Rooms> q = em.createQuery(
>>>>>>>>>> +                               "SELECT r from Rooms r LEFT JOIN
>>>>>>>>>> FETCH r.currentusers WHERE r.ispublic= true and r.deleted= false 
>>>>>>>>>> ORDER BY
>>>>>>>>>> r.name ASC", Rooms.class);
>>>>>>>>>> +               return q.getResultList();
>>>>>>>>>> +       }
>>>>>>>>>> +
>>>>>>>>>> +       public List<Rooms> getOrganisationRooms(long orgId) {
>>>>>>>>>> +               TypedQuery<Rooms> q = em.createQuery(
>>>>>>>>>> +                               "SELECT DISTINCT c.room FROM
>>>>>>>>>> Rooms_Organisation c LEFT JOIN FETCH c.room LEFT JOIN FETCH
>>>>>>>>>> c.room.currentusers "
>>>>>>>>>> +               + "WHERE c.organisation.organisation_id = :orgId "
>>>>>>>>>> +               + "AND c.deleted = false AND c.room.deleted =
>>>>>>>>>> false "
>>>>>>>>>> +               + "AND c.organisation.deleted = false "
>>>>>>>>>> +               + "ORDER BY c.room.name ASC", Rooms.class);
>>>>>>>>>> +               q.setParameter("orgId", orgId);
>>>>>>>>>> +               return q.getResultList();
>>>>>>>>>> +       }
>>>>>>>>>> +
>>>>>>>>>>         public Rooms update(Rooms entity, long userId) {
>>>>>>>>>>                 if (entity.getRooms_id() == null) {
>>>>>>>>>>                 /* Red5SIP integration
>>>>>>>>>> *******************************************************************************/
>>>>>>>>>>
>>>>>>>>>> Modified:
>>>>>>>>>> incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/persistence/beans/rooms/Rooms.java
>>>>>>>>>> URL:
>>>>>>>>>> http://svn.apache.org/viewvc/incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/persistence/beans/rooms/Rooms.java?rev=1400075&r1=1400074&r2=1400075&view=diff
>>>>>>>>>>
>>>>>>>>>> ==============================================================================
>>>>>>>>>> ---
>>>>>>>>>> incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/persistence/beans/rooms/Rooms.java
>>>>>>>>>> (original)
>>>>>>>>>> +++
>>>>>>>>>> incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/persistence/beans/rooms/Rooms.java
>>>>>>>>>> Fri Oct 19 12:39:38 2012
>>>>>>>>>> @@ -38,7 +38,6 @@ import javax.persistence.NamedQuery;
>>>>>>>>>>  import javax.persistence.OneToMany;
>>>>>>>>>>  import javax.persistence.OneToOne;
>>>>>>>>>>  import javax.persistence.Table;
>>>>>>>>>> -import javax.persistence.Transient;
>>>>>>>>>>
>>>>>>>>>>  import org.apache.openjpa.persistence.ElementDependent;
>>>>>>>>>>  import org.apache.openmeetings.persistence.beans.OmEntity;
>>>>>>>>>> @@ -69,7 +68,6 @@ public class Rooms implements Serializab
>>>>>>>>>>         private String name;
>>>>>>>>>>
>>>>>>>>>>         @Lob
>>>>>>>>>> -       // @Basic(fetch=FetchType.LAZY)
>>>>>>>>>>         @Column(name = "comment_field")
>>>>>>>>>>         @Element(data = true, required = false)
>>>>>>>>>>         private String comment;
>>>>>>>>>> @@ -217,10 +215,8 @@ public class Rooms implements Serializab
>>>>>>>>>>         @org.simpleframework.xml.Transient
>>>>>>>>>>         private List<Rooms_Organisation> roomOrganisations = new
>>>>>>>>>> ArrayList<Rooms_Organisation>();
>>>>>>>>>>
>>>>>>>>>> -       /*
>>>>>>>>>> -        * Non persistent attributes
>>>>>>>>>> -        */
>>>>>>>>>> -       @Transient
>>>>>>>>>> +       @OneToMany(fetch = FetchType.LAZY)
>>>>>>>>>> +       @JoinColumn(name = "room_id")
>>>>>>>>>>         private List<RoomClient> currentusers;
>>>>>>>>>>
>>>>>>>>>>         public String getComment() {
>>>>>>>>>>
>>>>>>>>>> Modified:
>>>>>>>>>> incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/components/user/calendar/CalendarForm.java
>>>>>>>>>> URL:
>>>>>>>>>> http://svn.apache.org/viewvc/incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/components/user/calendar/CalendarForm.java?rev=1400075&r1=1400074&r2=1400075&view=diff
>>>>>>>>>>
>>>>>>>>>> ==============================================================================
>>>>>>>>>> ---
>>>>>>>>>> incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/components/user/calendar/CalendarForm.java
>>>>>>>>>> (original)
>>>>>>>>>> +++
>>>>>>>>>> incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/components/user/calendar/CalendarForm.java
>>>>>>>>>> Fri Oct 19 12:39:38 2012
>>>>>>>>>> @@ -18,14 +18,36 @@
>>>>>>>>>>   */
>>>>>>>>>>  package org.apache.openmeetings.web.components.user.calendar;
>>>>>>>>>>
>>>>>>>>>> +import java.util.ArrayList;
>>>>>>>>>> +import java.util.List;
>>>>>>>>>> +
>>>>>>>>>> +import
>>>>>>>>>> org.apache.openmeetings.data.calendar.daos.AppointmentReminderTypDaoImpl;
>>>>>>>>>> +import org.apache.openmeetings.data.conference.RoomDAO;
>>>>>>>>>> +import org.apache.openmeetings.data.conference.Roommanagement;
>>>>>>>>>> +import org.apache.openmeetings.data.user.dao.UsersDaoImpl;
>>>>>>>>>>  import
>>>>>>>>>> org.apache.openmeetings.persistence.beans.calendar.Appointment;
>>>>>>>>>> +import
>>>>>>>>>> org.apache.openmeetings.persistence.beans.calendar.AppointmentReminderTyps;
>>>>>>>>>> +import
>>>>>>>>>> org.apache.openmeetings.persistence.beans.domain.Organisation_Users;
>>>>>>>>>> +import org.apache.openmeetings.persistence.beans.rooms.RoomTypes;
>>>>>>>>>> +import org.apache.openmeetings.persistence.beans.rooms.Rooms;
>>>>>>>>>> +import org.apache.openmeetings.web.app.Application;
>>>>>>>>>> +import org.apache.openmeetings.web.app.WebSession;
>>>>>>>>>> +import org.apache.wicket.ajax.AjaxRequestTarget;
>>>>>>>>>> +import org.apache.wicket.ajax.markup.html.form.AjaxCheckBox;
>>>>>>>>>> +import org.apache.wicket.extensions.yui.calendar.DateTimeField;
>>>>>>>>>> +import org.apache.wicket.markup.html.form.ChoiceRenderer;
>>>>>>>>>> +import org.apache.wicket.markup.html.form.DropDownChoice;
>>>>>>>>>>  import org.apache.wicket.markup.html.form.Form;
>>>>>>>>>> +import org.apache.wicket.markup.html.form.PasswordTextField;
>>>>>>>>>>  import org.apache.wicket.markup.html.form.RequiredTextField;
>>>>>>>>>>  import org.apache.wicket.markup.html.form.TextArea;
>>>>>>>>>> +import org.apache.wicket.markup.html.form.TextField;
>>>>>>>>>>  import org.apache.wicket.model.IModel;
>>>>>>>>>> +import org.apache.wicket.model.PropertyModel;
>>>>>>>>>>
>>>>>>>>>>  public class CalendarForm extends Form<Appointment> {
>>>>>>>>>>         private static final long serialVersionUID =
>>>>>>>>>> -1764738237821487526L;
>>>>>>>>>> +       private boolean createRoom = true;
>>>>>>>>>>
>>>>>>>>>>         public CalendarForm(String id, IModel<Appointment> model)
>>>>>>>>>> {
>>>>>>>>>>                 super(id, model);
>>>>>>>>>> @@ -33,5 +55,71 @@ public class CalendarForm extends Form<A
>>>>>>>>>>
>>>>>>>>>>                 add(new
>>>>>>>>>> RequiredTextField<String>("appointmentName"));
>>>>>>>>>>                 add(new
>>>>>>>>>> TextArea<String>("appointmentDescription"));
>>>>>>>>>> +               add(new TextField<String>("appointmentLocation"));
>>>>>>>>>> +               add(new DateTimeField("appointmentStarttime"));
>>>>>>>>>> +               add(new DateTimeField("appointmentEndtime"));
>>>>>>>>>> +               final PasswordTextField pwd = new
>>>>>>>>>> PasswordTextField("password");
>>>>>>>>>> +               pwd.setEnabled(isPwdProtected());
>>>>>>>>>> +               pwd.setOutputMarkupId(true);
>>>>>>>>>> +               add(pwd);
>>>>>>>>>> +
>>>>>>>>>> +               add(new DropDownChoice<AppointmentReminderTyps>(
>>>>>>>>>> +                               "remind"
>>>>>>>>>> +                               ,
>>>>>>>>>> Application.getBean(AppointmentReminderTypDaoImpl.class).getAppointmentReminderTypList()
>>>>>>>>>> +                               , new
>>>>>>>>>> ChoiceRenderer<AppointmentReminderTyps>("name", "typId")));
>>>>>>>>>> +
>>>>>>>>>> +               final DropDownChoice<RoomTypes> roomType = new
>>>>>>>>>> DropDownChoice<RoomTypes>(
>>>>>>>>>> +                               "room.roomtype"
>>>>>>>>>> +                               ,
>>>>>>>>>> Application.getBean(Roommanagement.class).getAllRoomTypes()
>>>>>>>>>> +                               , new
>>>>>>>>>> ChoiceRenderer<RoomTypes>("name", "roomtypes_id"));
>>>>>>>>>> +               roomType.setEnabled(createRoom);
>>>>>>>>>> +               roomType.setOutputMarkupId(true);
>>>>>>>>>> +               add(roomType);
>>>>>>>>>> +
>>>>>>>>>> +               final DropDownChoice<Rooms> room = new
>>>>>>>>>> DropDownChoice<Rooms>(
>>>>>>>>>> +                               "room"
>>>>>>>>>> +                               , getRoomList()
>>>>>>>>>> +                               , new
>>>>>>>>>> ChoiceRenderer<Rooms>("name", "rooms_id"));
>>>>>>>>>> +               room.setEnabled(!createRoom);
>>>>>>>>>> +               room.setOutputMarkupId(true);
>>>>>>>>>> +               add(room);
>>>>>>>>>> +
>>>>>>>>>> +               add(new AjaxCheckBox("createRoom", new
>>>>>>>>>> PropertyModel<Boolean>(this, "createRoom")) {
>>>>>>>>>> +                       private static final long
>>>>>>>>>> serialVersionUID = -3743113990890386035L;
>>>>>>>>>> +
>>>>>>>>>> +                       @Override
>>>>>>>>>> +                       protected void onUpdate(AjaxRequestTarget
>>>>>>>>>> target) {
>>>>>>>>>> +                               createRoom = getConvertedInput();
>>>>>>>>>> +
>>>>>>>>>> target.add(roomType.setEnabled(createRoom), 
>>>>>>>>>> room.setEnabled(!createRoom));
>>>>>>>>>> +                       }
>>>>>>>>>> +               });
>>>>>>>>>> +               add(new AjaxCheckBox("isPasswordProtected") {
>>>>>>>>>> +                       private static final long
>>>>>>>>>> serialVersionUID = 6041200584296439976L;
>>>>>>>>>> +
>>>>>>>>>> +                       @Override
>>>>>>>>>> +                       protected void onUpdate(AjaxRequestTarget
>>>>>>>>>> target) {
>>>>>>>>>> +
>>>>>>>>>> CalendarForm.this.getModelObject().setIsPasswordProtected(getConvertedInput());
>>>>>>>>>> +                               pwd.setEnabled(isPwdProtected());
>>>>>>>>>> +                               target.add(pwd);
>>>>>>>>>> +                       }
>>>>>>>>>> +               });
>>>>>>>>>> +       }
>>>>>>>>>> +
>>>>>>>>>> +       private boolean isPwdProtected() {
>>>>>>>>>> +               return
>>>>>>>>>> Boolean.TRUE.equals(getModelObject().getIsPasswordProtected());
>>>>>>>>>> +       }
>>>>>>>>>> +
>>>>>>>>>> +       private List<Rooms> getRoomList() {
>>>>>>>>>> +               //FIXME need to be reviewed
>>>>>>>>>> +               List<Rooms> result = new ArrayList<Rooms>();
>>>>>>>>>> +               RoomDAO dao = Application.getBean(RoomDAO.class);
>>>>>>>>>> +               result.addAll(dao.getPublicRooms());
>>>>>>>>>> +               for (Organisation_Users ou :
>>>>>>>>>> Application.getBean(UsersDaoImpl.class).get(WebSession.getUserId()).getOrganisation_users())
>>>>>>>>>> {
>>>>>>>>>> +
>>>>>>>>>> result.addAll(dao.getOrganisationRooms(ou.getOrganisation().getOrganisation_id()));
>>>>>>>>>> +               }
>>>>>>>>>> +               if (getModelObject().getRoom() != null &&
>>>>>>>>>> getModelObject().getRoom().getAppointment()) { //FIXME review
>>>>>>>>>> +                       result.add(getModelObject().getRoom());
>>>>>>>>>> +               }
>>>>>>>>>> +               return result;
>>>>>>>>>>         }
>>>>>>>>>>  }
>>>>>>>>>>
>>>>>>>>>> Modified:
>>>>>>>>>> incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/components/user/calendar/CalendarPanel.html
>>>>>>>>>> URL:
>>>>>>>>>> http://svn.apache.org/viewvc/incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/components/user/calendar/CalendarPanel.html?rev=1400075&r1=1400074&r2=1400075&view=diff
>>>>>>>>>>
>>>>>>>>>> ==============================================================================
>>>>>>>>>> ---
>>>>>>>>>> incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/components/user/calendar/CalendarPanel.html
>>>>>>>>>> (original)
>>>>>>>>>> +++
>>>>>>>>>> incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/components/user/calendar/CalendarPanel.html
>>>>>>>>>> Fri Oct 19 12:39:38 2012
>>>>>>>>>> @@ -71,7 +71,7 @@
>>>>>>>>>>                                 $('#appointment').dialog({
>>>>>>>>>>                                         closeOnEscape: true
>>>>>>>>>>                                         , resizable: true
>>>>>>>>>> -                                       , width: 400
>>>>>>>>>> +                                       , width: 450
>>>>>>>>>>                                         , autoOpen: false
>>>>>>>>>>                                         , modal: true
>>>>>>>>>>                                 });
>>>>>>>>>> @@ -89,53 +89,55 @@
>>>>>>>>>>
>>>>>>>>>> <td><wicket:ommessage key="572" /></td>
>>>>>>>>>>                                                 <td><input
>>>>>>>>>> type="text" wicket:id="appointmentName" /></td>
>>>>>>>>>>                                         </tr>
>>>>>>>>>> -                                       <!-- tr>
>>>>>>>>>> -                                               <td>&nbsp;</td>
>>>>>>>>>> -                                               <td>
>>>>>>>>>> -
>>>>>>>>>> <wicket:ommessage key="570" /><input type="text"
>>>>>>>>>> wicket:id="appointmentStarttime" />
>>>>>>>>>> -
>>>>>>>>>> <wicket:ommessage key="571" /><input type="text"
>>>>>>>>>> wicket:id="appointmentEndtime" />
>>>>>>>>>> -                                               </td>
>>>>>>>>>> +                                       <tr>
>>>>>>>>>> +
>>>>>>>>>> <td><wicket:ommessage key="570" /></td>
>>>>>>>>>> +                                               <td><span
>>>>>>>>>> wicket:id="appointmentStarttime"></span></td>
>>>>>>>>>> +                                       </tr>
>>>>>>>>>> +                                       <tr>
>>>>>>>>>> +
>>>>>>>>>> <td><wicket:ommessage key="571" /></td>
>>>>>>>>>> +                                               <td><span
>>>>>>>>>> wicket:id="appointmentEndtime"></span></td>
>>>>>>>>>>                                         </tr>
>>>>>>>>>>                                         <tr>
>>>>>>>>>>
>>>>>>>>>> <td><wicket:ommessage key="565" /></td>
>>>>>>>>>> -                                               <td><select
>>>>>>>>>> wicket:id="notification" ></select></td>
>>>>>>>>>> +                                               <td><select
>>>>>>>>>> wicket:id="remind" ></select></td>
>>>>>>>>>>                                         </tr>
>>>>>>>>>>                                         <tr>
>>>>>>>>>>                                                 <td
>>>>>>>>>> colspan="2"><input type="checkbox" wicket:id="createRoom"
>>>>>>>>>> /><wicket:ommessage key="1509" /></td>
>>>>>>>>>>                                         </tr>
>>>>>>>>>>                                         <tr>
>>>>>>>>>>
>>>>>>>>>> <td><wicket:ommessage key="619" /></td>
>>>>>>>>>> -                                               <td><select
>>>>>>>>>> wicket:id="roomType" ></select></td>
>>>>>>>>>> +                                               <td><select
>>>>>>>>>> wicket:id="room.roomtype" ></select></td>
>>>>>>>>>>                                         </tr>
>>>>>>>>>>                                         <tr>
>>>>>>>>>>
>>>>>>>>>> <td><wicket:ommessage key="406" /></td>
>>>>>>>>>>                                                 <td><select
>>>>>>>>>> wicket:id="room" ></select></td>
>>>>>>>>>>                                         </tr>
>>>>>>>>>>                                         <tr>
>>>>>>>>>> -                                               <td
>>>>>>>>>> colspan="2"><input type="checkbox" wicket:id="isPasswordProtected"
>>>>>>>>>> /><wicket:ommessage key="1509" /></td>
>>>>>>>>>> +                                               <td
>>>>>>>>>> colspan="2"><input type="checkbox" wicket:id="isPasswordProtected"
>>>>>>>>>> /><wicket:ommessage key="524" /></td>
>>>>>>>>>>                                         </tr>
>>>>>>>>>>                                         <tr>
>>>>>>>>>>
>>>>>>>>>> <td><wicket:ommessage key="525" /></td>
>>>>>>>>>> -                                               <td><input
>>>>>>>>>> type="text" wicket:id="password" /></td>
>>>>>>>>>> +                                               <td><input
>>>>>>>>>> type="password" wicket:id="password" /></td>
>>>>>>>>>>                                         </tr>
>>>>>>>>>>                                         <tr>
>>>>>>>>>>                                                 <td
>>>>>>>>>> colspan="2"><wicket:ommessage key="1445" /></td>
>>>>>>>>>>                                         </tr>
>>>>>>>>>> +                                       <!--
>>>>>>>>>>                                         <tr>
>>>>>>>>>>
>>>>>>>>>> <td><wicket:ommessage key="803" /></td>
>>>>>>>>>>                                                 <td><select
>>>>>>>>>> wicket:id="meetingMember" ></select></td>
>>>>>>>>>> -                                       </tr>
>>>>>>>>>> +                                       </tr -->
>>>>>>>>>>                                         <tr>
>>>>>>>>>>
>>>>>>>>>> <td><wicket:ommessage key="569" /></td>
>>>>>>>>>>                                                 <td><input
>>>>>>>>>> type="text" wicket:id="appointmentLocation" /></td>
>>>>>>>>>> -                                       </tr-->
>>>>>>>>>> +                                       </tr>
>>>>>>>>>>                                         <tr>
>>>>>>>>>>
>>>>>>>>>> <td><wicket:ommessage key="573" /></td>
>>>>>>>>>> -                                               <td><input
>>>>>>>>>> type="text" wicket:id="appointmentDescription" /></td>
>>>>>>>>>> +                                               <td><textarea
>>>>>>>>>> wicket:id="appointmentDescription"></textarea></td>
>>>>>>>>>>                                         </tr>
>>>>>>>>>>                                         <!-- tr>
>>>>>>>>>>                                                 <td colspan="2"
>>>>>>>>>> style="text-align: right"><input type="button" wicket:id="save" 
>>>>>>>>>> /><input
>>>>>>>>>> type="button" wicket:id="cancel" /></td>
>>>>>>>>>> -                                       </tr-->
>>>>>>>>>> +                                       </tr -->
>>>>>>>>>>                                 </table>
>>>>>>>>>>                         </form>
>>>>>>>>>>                 </div>
>>>>>>>>>>
>>>>>>>>>> Modified:
>>>>>>>>>> incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/components/user/calendar/CalendarPanel.java
>>>>>>>>>> URL:
>>>>>>>>>> http://svn.apache.org/viewvc/incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/components/user/calendar/CalendarPanel.java?rev=1400075&r1=1400074&r2=1400075&view=diff
>>>>>>>>>>
>>>>>>>>>> ==============================================================================
>>>>>>>>>> ---
>>>>>>>>>> incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/components/user/calendar/CalendarPanel.java
>>>>>>>>>> (original)
>>>>>>>>>> +++
>>>>>>>>>> incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/components/user/calendar/CalendarPanel.java
>>>>>>>>>> Fri Oct 19 12:39:38 2012
>>>>>>>>>> @@ -150,6 +150,9 @@ public class CalendarPanel extends UserP
>>>>>>>>>>                                 Calendar end =
>>>>>>>>>> WebSession.getCalendar();
>>>>>>>>>>
>>>>>>>>>> end.setTimeInMillis(getRequestCycle().getRequest().getRequestParameters().getParameterValue("_end").toLong());
>>>>>>>>>>
>>>>>>>>>> +                               if (start.equals(end)) {
>>>>>>>>>> +
>>>>>>>>>> end.add(Calendar.HOUR_OF_DAY, 1);
>>>>>>>>>> +                               }
>>>>>>>>>>                                 Appointment a = new Appointment();
>>>>>>>>>>
>>>>>>>>>> a.setAppointmentStarttime(start.getTime());
>>>>>>>>>>
>>>>>>>>>> a.setAppointmentEndtime(end.getTime());
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> --
>>>>>>>>> Sebastian Wagner
>>>>>>>>> https://twitter.com/#!/dead_lock
>>>>>>>>> http://www.webbase-design.de
>>>>>>>>> http://www.wagner-sebastian.com
>>>>>>>>> [email protected]
>>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> --
>>>>>>>> Sebastian Wagner
>>>>>>>> https://twitter.com/#!/dead_lock
>>>>>>>> http://www.webbase-design.de
>>>>>>>> http://www.wagner-sebastian.com
>>>>>>>> [email protected]
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>
>>>>>
>>>>> --
>>>>> Sebastian Wagner
>>>>> https://twitter.com/#!/dead_lock
>>>>> http://www.webbase-design.de
>>>>> http://www.wagner-sebastian.com
>>>>> [email protected]
>>>>>
>>>>
>>>>
>>>>
>>>> --
>>>> WBR
>>>> Maxim aka solomax
>>>>
>>>
>>>
>>>
>>> --
>>> Sebastian Wagner
>>> https://twitter.com/#!/dead_lock
>>> http://www.webbase-design.de
>>> http://www.wagner-sebastian.com
>>> [email protected]
>>>
>>
>>
>>
>> --
>> WBR
>> Maxim aka solomax
>>
>
>
>
> --
> Sebastian Wagner
> https://twitter.com/#!/dead_lock
> http://www.webbase-design.de
> http://www.wagner-sebastian.com
> [email protected]
>



-- 
WBR
Maxim aka solomax

Reply via email to