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 2017/01/27 10:01:05 UTC

svn commit: r1780531 [1/2] - in /openmeetings/application: branches/3.2.x/openmeetings-db/ branches/3.2.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/user/ branches/3.2.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/cal...

Author: solomax
Date: Fri Jan 27 10:01:04 2017
New Revision: 1780531

URL: http://svn.apache.org/viewvc?rev=1780531&view=rev
Log:
[OPENMEETINGS-1543] output appointment json is fixed, meetingMembers processing is fixed

Added:
    openmeetings/application/branches/3.2.x/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/util/AppointmentListMessageBodyWriter.java
    openmeetings/application/branches/3.2.x/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/util/AppointmentMessageBodyWriter.java
    openmeetings/application/trunk/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/util/AppointmentListMessageBodyWriter.java
    openmeetings/application/trunk/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/util/AppointmentMessageBodyWriter.java
Modified:
    openmeetings/application/branches/3.2.x/openmeetings-db/pom.xml
    openmeetings/application/branches/3.2.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/user/UserDao.java
    openmeetings/application/branches/3.2.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/calendar/AppointmentDTO.java
    openmeetings/application/branches/3.2.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/calendar/MeetingMemberDTO.java
    openmeetings/application/branches/3.2.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/room/RoomDTO.java
    openmeetings/application/branches/3.2.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/room/RoomOptionsDTO.java
    openmeetings/application/branches/3.2.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/user/ExternalUserDTO.java
    openmeetings/application/branches/3.2.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/user/UserDTO.java
    openmeetings/application/branches/3.2.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/util/DtoHelper.java
    openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileItemTree.java
    openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/SignInPage.java
    openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/SwfPanel.java
    openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/RoomSidebar.java
    openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/ChatPanel.java
    openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/calendar/CalendarPanel.java
    openmeetings/application/branches/3.2.x/openmeetings-web/src/main/webapp/WEB-INF/classes/openmeetings-applicationContext.xml
    openmeetings/application/branches/3.2.x/openmeetings-web/src/test/java/org/apache/openmeetings/test/webservice/TestCalendarService.java
    openmeetings/application/branches/3.2.x/openmeetings-web/src/test/java/org/apache/openmeetings/test/webservice/TestWebConverters.java
    openmeetings/application/branches/3.2.x/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/util/AppointmentParamConverter.java
    openmeetings/application/trunk/openmeetings-db/pom.xml
    openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/user/UserDao.java
    openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/calendar/AppointmentDTO.java
    openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/calendar/MeetingMemberDTO.java
    openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/room/RoomDTO.java
    openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/room/RoomOptionsDTO.java
    openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/user/ExternalUserDTO.java
    openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/user/UserDTO.java
    openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/util/DtoHelper.java
    openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileItemTree.java
    openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/SignInPage.java
    openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/SwfPanel.java
    openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/RoomSidebar.java
    openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/ChatPanel.java
    openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/calendar/CalendarPanel.java
    openmeetings/application/trunk/openmeetings-web/src/main/webapp/WEB-INF/classes/openmeetings-applicationContext.xml
    openmeetings/application/trunk/openmeetings-web/src/test/java/org/apache/openmeetings/test/webservice/TestCalendarService.java
    openmeetings/application/trunk/openmeetings-web/src/test/java/org/apache/openmeetings/test/webservice/TestWebConverters.java
    openmeetings/application/trunk/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/util/AppointmentParamConverter.java

Modified: openmeetings/application/branches/3.2.x/openmeetings-db/pom.xml
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-db/pom.xml?rev=1780531&r1=1780530&r2=1780531&view=diff
==============================================================================
--- openmeetings/application/branches/3.2.x/openmeetings-db/pom.xml (original)
+++ openmeetings/application/branches/3.2.x/openmeetings-db/pom.xml Fri Jan 27 10:01:04 2017
@@ -112,6 +112,11 @@
 			<artifactId>postgresql</artifactId>
 			<version>${postgresql.version}</version>
 		</dependency>
+		<dependency>
+			<groupId>com.tdunning</groupId>
+			<artifactId>json</artifactId>
+			<version>1.8</version> <!-- FIXME need to be removed with update to wicket-8.x -->
+		</dependency>
 	</dependencies>
 	<build>
 		<plugins>

Modified: openmeetings/application/branches/3.2.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/user/UserDao.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/user/UserDao.java?rev=1780531&r1=1780530&r2=1780531&view=diff
==============================================================================
--- openmeetings/application/branches/3.2.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/user/UserDao.java (original)
+++ openmeetings/application/branches/3.2.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/user/UserDao.java Fri Jan 27 10:01:04 2017
@@ -47,6 +47,7 @@ import org.apache.openjpa.persistence.Op
 import org.apache.openjpa.persistence.OpenJPAQuery;
 import org.apache.openmeetings.db.dao.IGroupAdminDataProviderDao;
 import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
+import org.apache.openmeetings.db.dao.label.LabelDao;
 import org.apache.openmeetings.db.entity.user.Address;
 import org.apache.openmeetings.db.entity.user.GroupUser;
 import org.apache.openmeetings.db.entity.user.User;
@@ -67,9 +68,9 @@ import org.springframework.transaction.a
 
 /**
  * CRUD operations for {@link User}
- * 
+ *
  * @author swagner, solomax, vasya
- * 
+ *
  */
 @Transactional
 public class UserDao implements IGroupAdminDataProviderDao<User> {
@@ -97,7 +98,7 @@ public class UserDao implements IGroupAd
 	/**
 	 * Get a new instance of the {@link User} entity, with all default values
 	 * set
-	 * 
+	 *
 	 * @param currentUser - the user to copy time zone from
 	 * @return new User instance
 	 */
@@ -126,11 +127,11 @@ public class UserDao implements IGroupAd
 		q.setMaxResults(count);
 		return q.getResultList();
 	}
-	
+
 	private static String getAdditionalJoin(boolean filterContacts) {
 		return filterContacts ? "LEFT JOIN u.groupUsers ou" : null;
 	}
-	
+
 	private static String getAdditionalWhere(boolean excludeContacts, Map<String, Object> params) {
 		if (excludeContacts) {
 			params.put("contact", Type.contact);
@@ -138,7 +139,7 @@ public class UserDao implements IGroupAd
 		}
 		return null;
 	}
-	
+
 	private static String getAdditionalWhere(boolean filterContacts, Long ownerId, Map<String, Object> params) {
 		if (filterContacts) {
 			params.put("ownerId", ownerId);
@@ -148,7 +149,7 @@ public class UserDao implements IGroupAd
 		}
 		return null;
 	}
-	
+
 	private static void setAdditionalParams(TypedQuery<?> q, Map<String, Object> params) {
 		for (Map.Entry<String, Object> me: params.entrySet()) {
 			q.setParameter(me.getKey(), me.getValue());
@@ -240,7 +241,7 @@ public class UserDao implements IGroupAd
 		}
 		return u;
 	}
-	
+
 	//this method is required to be able to drop reset hash
 	public User resetPassword(User u, String password) throws NoSuchAlgorithmException {
 		if (u != null) {
@@ -249,7 +250,7 @@ public class UserDao implements IGroupAd
 		}
 		return u;
 	}
-	
+
 	// TODO: Why the password field is not set via the Model is because its
 	// FetchType is Lazy, this extra hook here might be not needed with a
 	// different mechanism to protect the password from being read
@@ -264,17 +265,17 @@ public class UserDao implements IGroupAd
 		}
 		return u;
 	}
-	
+
 	@Override
 	public User get(Long id) {
 		return get(id, false);
 	}
-	
+
 	@Override
 	public User get(long id) {
 		return get(Long.valueOf(id), false);
 	}
-	
+
 	private User get(Long id, boolean force) {
 		User u = null;
 		if (id != null && id.longValue() > 0) {
@@ -344,7 +345,7 @@ public class UserDao implements IGroupAd
 
 	/**
 	 * check for duplicates
-	 * 
+	 *
 	 * @param login
 	 * @param type
 	 * @param domainId
@@ -363,7 +364,7 @@ public class UserDao implements IGroupAd
 
 	/**
 	 * Checks if a mail is already taken by someone else
-	 * 
+	 *
 	 * @param email
 	 * @param type
 	 * @param domainId
@@ -384,7 +385,7 @@ public class UserDao implements IGroupAd
 	public boolean validLogin(String login) {
 		return !Strings.isEmpty(login) && login.length() >= UserHelper.getMinLoginLength(cfgDao);
 	}
-	
+
 	public User getByLogin(String login, Type type, Long domainId) {
 		User u = null;
 		try {
@@ -457,7 +458,7 @@ public class UserDao implements IGroupAd
 
 	/**
 	 * Returns true if the password is correct
-	 * 
+	 *
 	 * @param userId
 	 * @param password
 	 * @return
@@ -474,19 +475,19 @@ public class UserDao implements IGroupAd
 	public User getContact(String email, Long ownerId) {
 		return getContact(email, "", "", ownerId);
 	}
-	
+
 	public User getContact(String email, User owner) {
 		return getContact(email, "", "", null, null, owner);
 	}
-	
+
 	public User getContact(String email, String firstName, String lastName, Long ownerId) {
 		return getContact(email, firstName, lastName, null, null, get(ownerId));
 	}
-	
+
 	public User getContact(String email, String firstName, String lastName, Long langId, String tzId, Long ownerId) {
 		return getContact(email, firstName, lastName, langId, tzId, get(ownerId));
 	}
-	
+
 	public User getContact(String email, String firstName, String lastName, Long langId, String tzId, User owner) {
 		User to = null;
 		try {
@@ -502,11 +503,11 @@ public class UserDao implements IGroupAd
 			to.setLogin(login.length() < getMinLoginLength(cfgDao) ? UUID.randomUUID().toString() : login);
 			to.setFirstname(firstName);
 			to.setLastname(lastName);
-			to.setLanguageId(null == langId ? owner.getLanguageId() : langId.longValue());
+			to.setLanguageId(null == langId || null == LabelDao.languages.get(langId) ? owner.getLanguageId() : langId.longValue());
 			to.setOwnerId(owner.getId());
 			to.setAddress(new Address());
 			to.getAddress().setEmail(email);
-			to.setTimeZoneId(null == tzId ? owner.getTimeZoneId() : tzId);
+			to.setTimeZoneId(Strings.isEmpty(tzId) ? owner.getTimeZoneId() : tzId);
 		}
 		return to;
 	}
@@ -532,7 +533,7 @@ public class UserDao implements IGroupAd
 		Map<String, Object> params = new HashMap<String, Object>();
 		boolean filterContacts = true;
 		boolean count = clazz.isAssignableFrom(Long.class);
-		
+
 		StringBuilder sb = new StringBuilder("SELECT ");
 		sb.append(count ? "COUNT(" : "").append("u").append(count ? ") " : " ")
 			.append("FROM User u ").append(getAdditionalJoin(filterContacts)).append(" WHERE u.deleted = false AND ")
@@ -560,11 +561,11 @@ public class UserDao implements IGroupAd
 		setAdditionalParams(query, params);
 		return query;
 	}
-	
+
 	private static String getStringParam(String param) {
 		return param == null ? "%" : "%" + StringUtils.lowerCase(param) + "%";
 	}
-	
+
 	public List<User> searchUserProfile(Long userId, String text, String offers, String search, String orderBy, int start, int max, boolean asc) {
 		return getUserProfileQuery(User.class, userId, text, offers, search, orderBy, asc).setFirstResult(start).setMaxResults(max).getResultList();
 	}
@@ -589,7 +590,7 @@ public class UserDao implements IGroupAd
 	public List<User> get(String search, int start, int count, String order) {
 		return get(search, start, count, order, false, Long.valueOf(-1));
 	}
-	
+
 	public Set<Right> getRights(Long id) {
 		Set<Right> rights = new HashSet<Right>();
 
@@ -608,14 +609,14 @@ public class UserDao implements IGroupAd
 		}
 		return rights;
 	}
-	
+
 	/**
 	 * login logic
-	 * 
+	 *
 	 * @param userOrEmail: login or email of the user being tested
 	 * @param userpass: password of the user being tested
 	 * @return User object in case of successful login
-	 * @throws OmException in case of any issue 
+	 * @throws OmException in case of any issue
 	 */
 	public User login(String userOrEmail, String userpass) throws OmException {
 		List<User> users = em.createNamedQuery("getUserByLoginOrEmail", User.class)
@@ -645,11 +646,11 @@ public class UserDao implements IGroupAd
 			log.debug("No Group assigned: {}", u);
 			throw new OmException("No Group assigned to user");
 		}
-		
+
 		u.setLastlogin(new Date());
 		return update(u, u.getId());
 	}
-	
+
 	public Address getAddress(String street, String zip, String town, String country, String additionalname, String fax, String phone, String email) {
 		Address a =  new Address();
 		a.setStreet(street);
@@ -663,12 +664,12 @@ public class UserDao implements IGroupAd
 		a.setEmail(email);
 		return a;
 	}
-	
+
 	public User addUser(Set<Right> rights, String firstname, String login, String lastname, long languageId,
 			String userpass, Address adress, boolean sendSMS, Date age, String hash, TimeZone timezone,
 			boolean forceTimeZoneCheck, String userOffers, String userSearchs, boolean showContactData,
 			boolean showContactDataToContacts, String externalId, String externalType, List<Long> groupIds, String pictureuri) throws NoSuchAlgorithmException, UnsupportedEncodingException {
-		
+
 		User u = new User();
 		u.setFirstname(firstname);
 		u.setLogin(login);
@@ -706,7 +707,7 @@ public class UserDao implements IGroupAd
 				u.getGroupUsers().add(new GroupUser(groupDao.get(grpId), u));
 			}
 		}
-		
+
 		return update(u, null);
 	}
 }

Modified: openmeetings/application/branches/3.2.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/calendar/AppointmentDTO.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/calendar/AppointmentDTO.java?rev=1780531&r1=1780530&r2=1780531&view=diff
==============================================================================
--- openmeetings/application/branches/3.2.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/calendar/AppointmentDTO.java (original)
+++ openmeetings/application/branches/3.2.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/calendar/AppointmentDTO.java Fri Jan 27 10:01:04 2017
@@ -37,7 +37,7 @@ import org.apache.openmeetings.db.entity
 import org.apache.openmeetings.db.entity.calendar.Appointment.Reminder;
 import org.apache.openmeetings.db.entity.calendar.MeetingMember;
 import org.apache.openmeetings.db.entity.user.User;
-import org.apache.wicket.ajax.json.JSONObject;
+import org.json.JSONObject;
 
 @XmlRootElement
 @XmlAccessorType(XmlAccessType.FIELD)
@@ -108,12 +108,27 @@ public class AppointmentDTO implements S
 		a.setReminder(reminder);
 		a.setRoom(room.get());
 		a.setIcalId(icalId);
-		a.setMeetingMembers(new ArrayList<MeetingMember>());
+		List<MeetingMember> mml = new ArrayList<>();
 		for(MeetingMemberDTO mm : meetingMembers) {
-			MeetingMember m = mm.get(userDao, u);
-			m.setAppointment(a);
-			a.getMeetingMembers().add(m);
+			MeetingMember m = null;
+			if (mm.getId() != null) {
+				//if ID is NOT null it should already be in the list
+				for (MeetingMember m1 : a.getMeetingMembers()) {
+					if (m1.getId().equals(mm.getId())) {
+						m = m1;
+						break;
+					}
+				}
+				if (m == null) {
+					throw new RuntimeException("Weird guest from different appointment is passed");
+				}
+			} else {
+				m = mm.get(userDao, u);
+				m.setAppointment(a);
+			}
+			mml.add(m);
 		}
+		a.setMeetingMembers(mml);
 		a.setLanguageId(languageId);
 		a.setPasswordProtected(passwordProtected);
 		a.setConnectedEvent(connectedEvent);

Modified: openmeetings/application/branches/3.2.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/calendar/MeetingMemberDTO.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/calendar/MeetingMemberDTO.java?rev=1780531&r1=1780530&r2=1780531&view=diff
==============================================================================
--- openmeetings/application/branches/3.2.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/calendar/MeetingMemberDTO.java (original)
+++ openmeetings/application/branches/3.2.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/calendar/MeetingMemberDTO.java Fri Jan 27 10:01:04 2017
@@ -30,8 +30,8 @@ import org.apache.openmeetings.db.dao.us
 import org.apache.openmeetings.db.dto.user.UserDTO;
 import org.apache.openmeetings.db.entity.calendar.MeetingMember;
 import org.apache.openmeetings.db.entity.user.User;
-import org.apache.wicket.ajax.json.JSONObject;
 import org.apache.wicket.util.string.Strings;
+import org.json.JSONObject;
 
 @XmlRootElement
 @XmlAccessorType(XmlAccessType.FIELD)
@@ -104,15 +104,8 @@ public class MeetingMemberDTO implements
 		return m;
 	}
 
-	public static JSONObject json(MeetingMemberDTO mm) {
-		JSONObject m = new JSONObject();
-		m.put("id", mm.getId());
-		m.put("user", UserDTO.json(mm.getUser()));
-		return m;
-	}
-
 	@Override
 	public String toString() {
-		return json(this).toString();
+		return new JSONObject(this).toString();
 	}
 }

Modified: openmeetings/application/branches/3.2.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/room/RoomDTO.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/room/RoomDTO.java?rev=1780531&r1=1780530&r2=1780531&view=diff
==============================================================================
--- openmeetings/application/branches/3.2.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/room/RoomDTO.java (original)
+++ openmeetings/application/branches/3.2.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/room/RoomDTO.java Fri Jan 27 10:01:04 2017
@@ -18,9 +18,9 @@
  */
 package org.apache.openmeetings.db.dto.room;
 
-import static org.apache.openmeetings.db.dto.room.RoomOptionsDTO.optInt;
 import static org.apache.openmeetings.db.util.DtoHelper.optEnum;
 import static org.apache.openmeetings.db.util.DtoHelper.optEnumList;
+import static org.apache.openmeetings.db.util.DtoHelper.optInt;
 import static org.apache.openmeetings.db.util.DtoHelper.optLong;
 
 import java.io.Serializable;
@@ -35,8 +35,8 @@ import javax.xml.bind.annotation.XmlRoot
 
 import org.apache.openmeetings.db.entity.room.Room;
 import org.apache.openmeetings.db.entity.room.Room.RoomElement;
-import org.apache.wicket.ajax.json.JSONArray;
-import org.apache.wicket.ajax.json.JSONObject;
+import org.json.JSONObject;
+
 @XmlRootElement
 @XmlAccessorType(XmlAccessType.FIELD)
 public class RoomDTO implements Serializable {
@@ -313,15 +313,6 @@ public class RoomDTO implements Serializ
 		return r;
 	}
 
-	public static JSONObject json(RoomDTO r) {
-		JSONArray rr = new JSONArray();
-		for (RoomElement h : r.getHiddenElements()) {
-			rr.put(h.name());
-		}
-		return new JSONObject(r).put("hiddenElements", rr)
-				.put("type", r.getType().name());
-	}
-
 	@Override
 	public String toString() {
 		return new JSONObject(this).toString();

Modified: openmeetings/application/branches/3.2.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/room/RoomOptionsDTO.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/room/RoomOptionsDTO.java?rev=1780531&r1=1780530&r2=1780531&view=diff
==============================================================================
--- openmeetings/application/branches/3.2.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/room/RoomOptionsDTO.java (original)
+++ openmeetings/application/branches/3.2.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/room/RoomOptionsDTO.java Fri Jan 27 10:01:04 2017
@@ -26,7 +26,7 @@ import javax.xml.bind.annotation.XmlAcce
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlRootElement;
 
-import org.apache.wicket.ajax.json.JSONObject;
+import org.json.JSONObject;
 
 @XmlRootElement
 @XmlAccessorType(XmlAccessType.FIELD)
@@ -89,10 +89,6 @@ public class RoomOptionsDTO implements S
 		this.allowRecording = allowRecording;
 	}
 
-	public static Integer optInt(JSONObject o, String key) {
-		return o.has(key) && !o.isNull(key) ? o.getInt(key) : null;
-	}
-
 	public static RoomOptionsDTO fromString(String s) {
 		JSONObject o = new JSONObject(s);
 		RoomOptionsDTO ro = new RoomOptionsDTO();

Modified: openmeetings/application/branches/3.2.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/user/ExternalUserDTO.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/user/ExternalUserDTO.java?rev=1780531&r1=1780530&r2=1780531&view=diff
==============================================================================
--- openmeetings/application/branches/3.2.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/user/ExternalUserDTO.java (original)
+++ openmeetings/application/branches/3.2.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/user/ExternalUserDTO.java Fri Jan 27 10:01:04 2017
@@ -24,7 +24,7 @@ import javax.xml.bind.annotation.XmlAcce
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlRootElement;
 
-import org.apache.wicket.ajax.json.JSONObject;
+import org.json.JSONObject;
 
 @XmlRootElement
 @XmlAccessorType(XmlAccessType.FIELD)
@@ -95,7 +95,7 @@ public class ExternalUserDTO implements
 	public void setExternalType(String externalType) {
 		this.externalType = externalType;
 	}
-	
+
 	public static ExternalUserDTO fromString(String s) {
 		JSONObject o = new JSONObject(s);
 		ExternalUserDTO u = new ExternalUserDTO();
@@ -108,7 +108,7 @@ public class ExternalUserDTO implements
 		u.profilePictureUrl = o.optString("profilePictureUrl", null);
 		return u;
 	}
-	
+
 	@Override
 	public String toString() {
 		return new JSONObject(this).toString();

Modified: openmeetings/application/branches/3.2.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/user/UserDTO.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/user/UserDTO.java?rev=1780531&r1=1780530&r2=1780531&view=diff
==============================================================================
--- openmeetings/application/branches/3.2.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/user/UserDTO.java (original)
+++ openmeetings/application/branches/3.2.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/user/UserDTO.java Fri Jan 27 10:01:04 2017
@@ -35,8 +35,7 @@ import org.apache.openmeetings.db.entity
 import org.apache.openmeetings.db.entity.user.User;
 import org.apache.openmeetings.db.entity.user.User.Right;
 import org.apache.openmeetings.db.entity.user.User.Type;
-import org.apache.wicket.ajax.json.JSONArray;
-import org.apache.wicket.ajax.json.JSONObject;
+import org.json.JSONObject;
 
 @XmlRootElement
 public class UserDTO implements Serializable {
@@ -214,14 +213,4 @@ public class UserDTO implements Serializ
 		u.type = optEnum(Type.class, o, "type");
 		return u;
 	}
-
-	public static JSONObject json(UserDTO u) {
-		JSONObject o = new JSONObject(u)
-				.put("type", u.getType().name());
-		JSONArray rr = new JSONArray();
-		for (Right r : u.getRights()) {
-			rr.put(r.name());
-		}
-		return o.put("rights", rr);
-	}
 }

Modified: openmeetings/application/branches/3.2.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/util/DtoHelper.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/util/DtoHelper.java?rev=1780531&r1=1780530&r2=1780531&view=diff
==============================================================================
--- openmeetings/application/branches/3.2.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/util/DtoHelper.java (original)
+++ openmeetings/application/branches/3.2.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/util/DtoHelper.java Fri Jan 27 10:01:04 2017
@@ -21,10 +21,14 @@ package org.apache.openmeetings.db.util;
 import java.util.ArrayList;
 import java.util.Collection;
 
-import org.apache.wicket.ajax.json.JSONArray;
-import org.apache.wicket.ajax.json.JSONObject;
+import org.json.JSONArray;
+import org.json.JSONObject;
 
 public class DtoHelper {
+	public static Integer optInt(JSONObject o, String key) {
+		return o.has(key) && !o.isNull(key) ? o.getInt(key) : null;
+	}
+
 	public static Long optLong(JSONObject o, String key) {
 		return o.has(key) && !o.isNull(key) ? o.getLong(key) : null;
 	}

Modified: openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileItemTree.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileItemTree.java?rev=1780531&r1=1780530&r2=1780531&view=diff
==============================================================================
--- openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileItemTree.java (original)
+++ openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileItemTree.java Fri Jan 27 10:01:04 2017
@@ -26,7 +26,6 @@ import org.apache.wicket.Component;
 import org.apache.wicket.MarkupContainer;
 import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.apache.wicket.ajax.attributes.AjaxRequestAttributes;
-import org.apache.wicket.ajax.json.JSONObject;
 import org.apache.wicket.ajax.markup.html.AjaxLink;
 import org.apache.wicket.extensions.markup.html.repeater.tree.DefaultNestedTree;
 import org.apache.wicket.extensions.markup.html.repeater.tree.ITreeProvider;
@@ -35,6 +34,7 @@ import org.apache.wicket.markup.repeater
 import org.apache.wicket.model.IModel;
 import org.apache.wicket.model.Model;
 import org.apache.wicket.util.string.Strings;
+import org.json.JSONObject;
 
 public class FileItemTree extends DefaultNestedTree<FileItem> {
 	private static final long serialVersionUID = 1L;

Modified: openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/SignInPage.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/SignInPage.java?rev=1780531&r1=1780530&r2=1780531&view=diff
==============================================================================
--- openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/SignInPage.java (original)
+++ openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/SignInPage.java Fri Jan 27 10:01:04 2017
@@ -59,14 +59,13 @@ import org.apache.openmeetings.web.app.W
 import org.apache.openmeetings.web.pages.BaseInitedPage;
 import org.apache.wicket.Component;
 import org.apache.wicket.ajax.AjaxRequestTarget;
-import org.apache.wicket.ajax.json.JSONException;
-import org.apache.wicket.ajax.json.JSONObject;
 import org.apache.wicket.markup.head.IHeaderResponse;
 import org.apache.wicket.request.IRequestParameters;
 import org.apache.wicket.request.cycle.RequestCycle;
 import org.apache.wicket.request.flow.RedirectToUrlException;
 import org.apache.wicket.request.mapper.parameter.PageParameters;
 import org.apache.wicket.util.string.StringValue;
+import org.json.JSONObject;
 import org.red5.logging.Red5LoggerFactory;
 import org.slf4j.Logger;
 
@@ -75,15 +74,15 @@ public class SignInPage extends BaseInit
 	private static final Logger log = Red5LoggerFactory.getLogger(SignInPage.class, webAppRootKey);
 	private SignInDialog d;
 	private KickMessageDialog m;
-	
+
 	static boolean allowRegister() {
 		return "1".equals(getBean(ConfigurationDao.class).getConfValue(CONFIG_FRONTEND_REGISTER_KEY, String.class, "0"));
 	}
-	
+
 	static boolean allowOAuthLogin() {
 		return getBean(OAuth2Dao.class).getActive().size() > 0;
 	}
-	
+
 	public SignInPage(PageParameters p) {
 		super();
 		StringValue oauthid = p.get("oauthid");
@@ -96,7 +95,7 @@ public class SignInPage extends BaseInit
 					log.warn("OAuth server id=" + serverId + " not found");
 					return;
 				}
-				
+
 				if (p.get("code").toString() != null) { // got code
 					String code = p.get("code").toString();
 					log.debug("OAuth response code=" + code);
@@ -108,7 +107,7 @@ public class SignInPage extends BaseInit
 						loginViaOAuth2(authParams, serverId);
 					}
 				} else { // redirect to get code
-					String redirectUrl = prepareUrlParams(server.getRequestKeyUrl(), server.getClientId(), 
+					String redirectUrl = prepareUrlParams(server.getRequestKeyUrl(), server.getClientId(),
 							null, null, getRedirectUri(server, this), null);
 					log.debug("redirectUrl=" + redirectUrl);
 					throw new RedirectToUrlException(redirectUrl);
@@ -129,7 +128,7 @@ public class SignInPage extends BaseInit
 				log.error("Failed to login using POST parameters passed");
 			}
 		}
-		
+
 		RegisterDialog r = new RegisterDialog("register");
 		ForgetPasswordDialog f = new ForgetPasswordDialog("forget");
 		d = new SignInDialog("signin");
@@ -138,27 +137,27 @@ public class SignInPage extends BaseInit
 		r.setSignInDialog(d);
 		f.setSignInDialog(d);
 		m = new KickMessageDialog("kick");
-		add(d.setVisible(!WebSession.get().isKickedByAdmin()), 
+		add(d.setVisible(!WebSession.get().isKickedByAdmin()),
 				r.setVisible(allowRegister()), f, m.setVisible(WebSession.get().isKickedByAdmin()));
 	}
-	
+
 	public SignInPage() {
 		this(new PageParameters());
 	}
-	
+
 	@Override
 	public void renderHead(IHeaderResponse response) {
 		super.renderHead(response);
 	}
-	
+
 	@Override
 	protected void onParameterArrival(IRequestParameters params, AjaxRequestTarget arg1) {
 		WebSession.get().setArea(getUrlFragment(params));
 	}
-	
+
 	// ============= OAuth2 methods =============
 
-	public String prepareUrlParams(String urlTemplate, String clientId, String clientSecret, 
+	public String prepareUrlParams(String urlTemplate, String clientId, String clientSecret,
 			String clientToken, String redirectUri, String code) throws UnsupportedEncodingException {
 		String result = urlTemplate;
 		if (clientId != null) {
@@ -192,7 +191,7 @@ public class SignInPage extends BaseInit
 		}
 		return result;
 	}
-		
+
 	private static void prepareConnection(URLConnection connection) {
 		if (!(connection instanceof HttpsURLConnection)) {
 			return;
@@ -212,7 +211,7 @@ public class SignInPage extends BaseInit
 			public X509Certificate[] getAcceptedIssuers() {
 				return null;
 			}
-				
+
 		}};
 		try {
 			SSLContext sslContext = SSLContext.getInstance("SSL");
@@ -220,12 +219,12 @@ public class SignInPage extends BaseInit
 			SSLSocketFactory sslSocketFactory = sslContext.getSocketFactory();
 			((HttpsURLConnection) connection).setSSLSocketFactory(sslSocketFactory);
 			((HttpsURLConnection) connection).setHostnameVerifier(new HostnameVerifier() {
-				
+
 				@Override
 				public boolean verify(String arg0, SSLSession arg1) {
 					return true;
 				}
-			
+
 			});
 		} catch (Exception e) {
 			log.error("[prepareConnection]", e);
@@ -236,7 +235,7 @@ public class SignInPage extends BaseInit
 		String requestTokenBaseUrl = server.getRequestTokenUrl();
 		// build url params to request auth token
 		String requestTokenParams = server.getRequestTokenAttributes();
-		requestTokenParams = prepareUrlParams(requestTokenParams, server.getClientId(), server.getClientSecret(), 
+		requestTokenParams = prepareUrlParams(requestTokenParams, server.getClientId(), server.getClientSecret(),
 				null, getRedirectUri(server, this), code);
 		// request auth token
 		HttpURLConnection urlConnection = (HttpURLConnection) new URL(requestTokenBaseUrl).openConnection();
@@ -254,29 +253,18 @@ public class SignInPage extends BaseInit
 		String sourceResponse = IOUtils.toString(urlConnection.getInputStream(), UTF_8);
 		// parse json result
 		AuthInfo result = new AuthInfo();
-		try {
-			JSONObject jsonResult = new JSONObject(sourceResponse.toString());
-			if (jsonResult.has("access_token")) {
-				result.accessToken = jsonResult.getString("access_token");
-			}
-			if (jsonResult.has("refresh_token")) {
-				result.refreshToken = jsonResult.getString("refresh_token");
-			}
-			if (jsonResult.has("token_type")) {
-				result.tokenType = jsonResult.getString("token_type");
-			}
-			if (jsonResult.has("expires_in")) {
-				result.expiresIn = jsonResult.getLong("expires_in");
-			}
-		} catch (JSONException e) {
-			// try to parse as canonical
-			Map<String, String> parsedMap = parseCanonicalResponse(sourceResponse.toString());
-			result.accessToken = parsedMap.get("access_token");
-			result.refreshToken = parsedMap.get("refresh_token");
-			result.tokenType = parsedMap.get("token_type");
-			try {
-				result.expiresIn = Long.valueOf(parsedMap.get("expires_in"));
-			} catch (NumberFormatException nfe) {}
+		JSONObject jsonResult = new JSONObject(sourceResponse.toString());
+		if (jsonResult.has("access_token")) {
+			result.accessToken = jsonResult.getString("access_token");
+		}
+		if (jsonResult.has("refresh_token")) {
+			result.refreshToken = jsonResult.getString("refresh_token");
+		}
+		if (jsonResult.has("token_type")) {
+			result.tokenType = jsonResult.getString("token_type");
+		}
+		if (jsonResult.has("expires_in")) {
+			result.expiresIn = jsonResult.getLong("expires_in");
 		}
 		// access token must be specified
 		if (result.accessToken == null) {
@@ -285,19 +273,7 @@ public class SignInPage extends BaseInit
 		}
 		return result;
 	}
-	
-	private static Map<String, String> parseCanonicalResponse(String response) {
-		String[] parts = response.split("&");
-		Map<String, String> result = new HashMap<String, String>();
-		for (String part: parts) {
-			String pair[] = part.split("=");
-			if (pair.length > 1) {
-				result.put(pair[0], pair[1]);
-			}
-		}
-		return result;
-	}
-	
+
 	private Map<String, String> getAuthParams(String token, String code, OAuthServer server) throws IOException {
 		// get attributes names
 		String loginAttributeName = server.getLoginParamName();
@@ -306,7 +282,7 @@ public class SignInPage extends BaseInit
 		String lastname = server.getLastnameParamName();
 		// prepare url
 		String requestInfoUrl = server.getRequestInfoUrl();
-		requestInfoUrl = prepareUrlParams(requestInfoUrl, server.getClientId(), server.getClientSecret(), 
+		requestInfoUrl = prepareUrlParams(requestInfoUrl, server.getClientId(), server.getClientSecret(),
 				token, getRedirectUri(server, this), code);
 		// send request
 		URLConnection connection = new URL(requestInfoUrl).openConnection();
@@ -314,27 +290,14 @@ public class SignInPage extends BaseInit
 		String sourceResponse = IOUtils.toString(connection.getInputStream(), UTF_8);
 		// parse json result
 		Map<String, String> result = new HashMap<>();
-		try {
-			JSONObject parsedJson = new JSONObject(sourceResponse);
-			result.put("login", parsedJson.getString(loginAttributeName));
-			result.put("email", parsedJson.getString(emailAttributeName));
-			if (parsedJson.has(firstname)) {
-				result.put("firstname", parsedJson.getString(firstname));
-			}
-			if (parsedJson.has(lastname)) {
-				result.put("lastname", parsedJson.getString(lastname));
-			}
-		} catch (JSONException e) {
-			// try to parse response as canonical
-			Map<String, String> parsedMap = parseCanonicalResponse(sourceResponse);
-			result.put("login", parsedMap.get(loginAttributeName));
-			result.put("email", parsedMap.get(emailAttributeName));
-			if (parsedMap.containsKey(firstname)) {
-				result.put("firstname", parsedMap.get(firstname));
-			}
-			if (parsedMap.containsKey(lastname)) {
-				result.put("lastname", parsedMap.get(lastname));
-			}
+		JSONObject parsedJson = new JSONObject(sourceResponse);
+		result.put("login", parsedJson.getString(loginAttributeName));
+		result.put("email", parsedJson.getString(emailAttributeName));
+		if (parsedJson.has(firstname)) {
+			result.put("firstname", parsedJson.getString(firstname));
+		}
+		if (parsedJson.has(lastname)) {
+			result.put("lastname", parsedJson.getString(lastname));
 		}
 		return result;
 	}

Modified: openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/SwfPanel.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/SwfPanel.java?rev=1780531&r1=1780530&r2=1780531&view=diff
==============================================================================
--- openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/SwfPanel.java (original)
+++ openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/SwfPanel.java Fri Jan 27 10:01:04 2017
@@ -39,8 +39,6 @@ import org.apache.openmeetings.web.app.W
 import org.apache.openmeetings.web.common.BasePanel;
 import org.apache.wicket.ajax.AbstractAjaxTimerBehavior;
 import org.apache.wicket.ajax.AjaxRequestTarget;
-import org.apache.wicket.ajax.json.JSONArray;
-import org.apache.wicket.ajax.json.JSONObject;
 import org.apache.wicket.markup.head.CssHeaderItem;
 import org.apache.wicket.markup.head.IHeaderResponse;
 import org.apache.wicket.markup.head.JavaScriptHeaderItem;
@@ -53,6 +51,8 @@ import org.apache.wicket.request.resourc
 import org.apache.wicket.util.string.StringValue;
 import org.apache.wicket.util.string.Strings;
 import org.apache.wicket.util.time.Duration;
+import org.json.JSONArray;
+import org.json.JSONObject;
 import org.red5.logging.Red5LoggerFactory;
 import org.slf4j.Logger;
 
@@ -65,15 +65,15 @@ public class SwfPanel extends BasePanel
 	public static final String SWF_TYPE_NETWORK = "network";
 	public static final String SWF_TYPE_SETTINGS = "settings";
 	private Long roomId = null;
-	
+
 	public SwfPanel(String id) {
 		this(id, new PageParameters());
 	}
-	
+
 	public SwfPanel(String id, Long roomId, String uid) {
 		this(id, addServer(roomId, true).add("uid", uid));
 	}
-	
+
 	public SwfPanel(String id, PageParameters pp) {
 		super(id);
 		//OK let's find the room
@@ -103,7 +103,7 @@ public class SwfPanel extends BasePanel
 	private static ResourceReference newResourceReference() {
 		return new JavaScriptResourceReference(SwfPanel.class, "swf-functions.js");
 	}
-	
+
 	@Override
 	public void renderHead(IHeaderResponse response) {
 		super.renderHead(response);
@@ -167,7 +167,7 @@ public class SwfPanel extends BasePanel
 	private static PageParameters addServer(PageParameters pp, Server s) {
 		return pp.add("protocol", s.getProtocol()).add("host", s.getAddress()).add("port", s.getPort()).add("context", s.getWebapp());
 	}
-	
+
 	public static PageParameters addServer(Long roomId, boolean addBasic) {
 		PageParameters pp = new PageParameters();
 		if (addBasic) {

Modified: openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/RoomSidebar.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/RoomSidebar.java?rev=1780531&r1=1780530&r2=1780531&view=diff
==============================================================================
--- openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/RoomSidebar.java (original)
+++ openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/RoomSidebar.java Fri Jan 27 10:01:04 2017
@@ -42,7 +42,6 @@ import org.apache.openmeetings.web.room.
 import org.apache.openmeetings.web.room.RoomPanel.Action;
 import org.apache.wicket.ajax.AbstractDefaultAjaxBehavior;
 import org.apache.wicket.ajax.AjaxRequestTarget;
-import org.apache.wicket.ajax.json.JSONObject;
 import org.apache.wicket.core.request.handler.IPartialPageRequestHandler;
 import org.apache.wicket.extensions.markup.html.tabs.ITab;
 import org.apache.wicket.markup.head.IHeaderResponse;
@@ -57,6 +56,7 @@ import org.apache.wicket.model.IModel;
 import org.apache.wicket.model.Model;
 import org.apache.wicket.util.string.StringValue;
 import org.apache.wicket.util.string.Strings;
+import org.json.JSONObject;
 import org.red5.logging.Red5LoggerFactory;
 import org.slf4j.Logger;
 

Modified: openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/ChatPanel.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/ChatPanel.java?rev=1780531&r1=1780530&r2=1780531&view=diff
==============================================================================
--- openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/ChatPanel.java (original)
+++ openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/ChatPanel.java Fri Jan 27 10:01:04 2017
@@ -18,6 +18,7 @@
  */
 package org.apache.openmeetings.web.user;
 
+import static org.apache.openmeetings.db.util.AuthLevelUtil.hasAdminLevel;
 import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_DASHBOARD_SHOW_CHAT;
 import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
 import static org.apache.openmeetings.web.app.Application.getBean;
@@ -25,13 +26,12 @@ import static org.apache.openmeetings.we
 import static org.apache.openmeetings.web.app.Application.getUserRooms;
 import static org.apache.openmeetings.web.app.Application.isUserInRoom;
 import static org.apache.openmeetings.web.app.WebSession.getDateFormat;
+import static org.apache.openmeetings.web.app.WebSession.getRights;
 import static org.apache.openmeetings.web.app.WebSession.getUserId;
 import static org.apache.openmeetings.web.room.RoomPanel.isModerator;
 import static org.apache.openmeetings.web.util.CallbackFunctionHelper.getNamedFunction;
 import static org.apache.openmeetings.web.util.ProfileImageResourceReference.getUrl;
 import static org.apache.wicket.ajax.attributes.CallbackParameter.explicit;
-import static org.apache.openmeetings.db.util.AuthLevelUtil.hasAdminLevel;
-import static org.apache.openmeetings.web.app.WebSession.getRights;
 
 import java.time.Duration;
 import java.time.Instant;
@@ -56,9 +56,6 @@ import org.apache.openmeetings.web.commo
 import org.apache.wicket.Component;
 import org.apache.wicket.ajax.AbstractDefaultAjaxBehavior;
 import org.apache.wicket.ajax.AjaxRequestTarget;
-import org.apache.wicket.ajax.json.JSONArray;
-import org.apache.wicket.ajax.json.JSONException;
-import org.apache.wicket.ajax.json.JSONObject;
 import org.apache.wicket.authroles.authorization.strategies.role.annotations.AuthorizeInstantiation;
 import org.apache.wicket.behavior.Behavior;
 import org.apache.wicket.core.request.handler.IPartialPageRequestHandler;
@@ -75,6 +72,8 @@ import org.apache.wicket.protocol.ws.api
 import org.apache.wicket.protocol.ws.api.registry.IWebSocketConnectionRegistry;
 import org.apache.wicket.protocol.ws.api.registry.PageIdKey;
 import org.apache.wicket.request.resource.JavaScriptResourceReference;
+import org.json.JSONArray;
+import org.json.JSONObject;
 import org.red5.logging.Red5LoggerFactory;
 import org.slf4j.Logger;
 
@@ -99,7 +98,7 @@ public class ChatPanel extends BasePanel
 		@Override
 		protected void respond(AjaxRequestTarget target) {
 			try {
-				long msgId = getRequest().getRequestParameters().getParameterValue(PARAM_MSG_ID).toLong(); 
+				long msgId = getRequest().getRequestParameters().getParameterValue(PARAM_MSG_ID).toLong();
 				long roomId = getRequest().getRequestParameters().getParameterValue(PARAM_ROOM_ID).toLong();
 				ChatDao dao = getBean(ChatDao.class);
 				ChatMessage m = dao.get(msgId);
@@ -133,11 +132,11 @@ public class ChatPanel extends BasePanel
 		return o.put("scope", scope).put("scopeName", scopeName);
 	}
 
-	public JSONObject getMessage(List<ChatMessage> list) throws JSONException {
+	public JSONObject getMessage(List<ChatMessage> list) {
 		return getMessage(getUserId(), list);
 	}
 
-	private JSONObject getMessage(long curUserId, List<ChatMessage> list) throws JSONException {
+	private JSONObject getMessage(long curUserId, List<ChatMessage> list) {
 		JSONArray arr = new JSONArray();
 		for (ChatMessage m : list) {
 			String smsg = m.getMessage();
@@ -170,21 +169,17 @@ public class ChatPanel extends BasePanel
 			@Override
 			public void renderHead(Component component, IHeaderResponse response) {
 				ChatDao dao = getBean(ChatDao.class);
-				try {				
-					//FIXME limited count should be loaded with "earlier" link
-					List<ChatMessage> list = new ArrayList<ChatMessage>(dao.getGlobal(0, 30));
-					for(Long roomId : getUserRooms(getUserId())) {
-						Room r = getBean(RoomDao.class).get(roomId);
-						list.addAll(dao.getRoom(roomId, 0, 30, !r.isChatModerated() || isModerator(getUserId(), roomId)));
-					}
-					list.addAll(dao.getUserRecent(getUserId(), Date.from(Instant.now().minus(Duration.ofHours(1L))), 0, 30));
-					if (list.size() > 0) {
-						StringBuilder sb = new StringBuilder();
-						sb.append("addChatMessage(").append(getMessage(list).toString()).append(");");
-						response.render(OnDomReadyHeaderItem.forScript(sb.toString()));
-					}
-				} catch (JSONException e) {
-					
+				//FIXME limited count should be loaded with "earlier" link
+				List<ChatMessage> list = new ArrayList<ChatMessage>(dao.getGlobal(0, 30));
+				for(Long roomId : getUserRooms(getUserId())) {
+					Room r = getBean(RoomDao.class).get(roomId);
+					list.addAll(dao.getRoom(roomId, 0, 30, !r.isChatModerated() || isModerator(getUserId(), roomId)));
+				}
+				list.addAll(dao.getUserRecent(getUserId(), Date.from(Instant.now().minus(Duration.ofHours(1L))), 0, 30));
+				if (list.size() > 0) {
+					StringBuilder sb = new StringBuilder();
+					sb.append("addChatMessage(").append(getMessage(list).toString()).append(");");
+					response.render(OnDomReadyHeaderItem.forScript(sb.toString()));
 				}
 				super.renderHead(component, response);
 			}
@@ -274,7 +269,7 @@ public class ChatPanel extends BasePanel
 		private final ChatToolbar toolbar = new ChatToolbar("toolbarContainer");
 		private final WysiwygEditor chatMessage = new WysiwygEditor("chatMessage", Model.of(""), toolbar);
 		private final HiddenField<String> activeTab = new HiddenField<String>("activeTab", Model.of(""));
-		
+
 		ChatForm(String id) {
 			super(id);
 			add(toolbar
@@ -282,7 +277,7 @@ public class ChatPanel extends BasePanel
 				, chatMessage.setOutputMarkupId(true)
 				, new AjaxButton("send") {
 					private static final long serialVersionUID = 1L;
-					
+
 					@Override
 					protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
 						ChatDao dao = getBean(ChatDao.class);
@@ -354,7 +349,7 @@ public class ChatPanel extends BasePanel
 					};
 				});
 		}
-		
+
 		@Override
 		protected void onInitialize() {
 			super.onInitialize();

Modified: openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/calendar/CalendarPanel.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/calendar/CalendarPanel.java?rev=1780531&r1=1780530&r2=1780531&view=diff
==============================================================================
--- openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/calendar/CalendarPanel.java (original)
+++ openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/calendar/CalendarPanel.java Fri Jan 27 10:01:04 2017
@@ -43,9 +43,6 @@ import org.apache.openmeetings.web.commo
 import org.apache.wicket.ajax.AbstractAjaxTimerBehavior;
 import org.apache.wicket.ajax.AjaxEventBehavior;
 import org.apache.wicket.ajax.AjaxRequestTarget;
-import org.apache.wicket.ajax.json.JSONArray;
-import org.apache.wicket.ajax.json.JSONException;
-import org.apache.wicket.ajax.json.JSONObject;
 import org.apache.wicket.core.request.handler.IPartialPageRequestHandler;
 import org.apache.wicket.markup.head.IHeaderResponse;
 import org.apache.wicket.markup.head.JavaScriptHeaderItem;
@@ -57,6 +54,8 @@ import org.apache.wicket.model.CompoundP
 import org.apache.wicket.model.LoadableDetachableModel;
 import org.apache.wicket.model.PropertyModel;
 import org.apache.wicket.util.time.Duration;
+import org.json.JSONArray;
+import org.json.JSONObject;
 import org.red5.logging.Red5LoggerFactory;
 import org.slf4j.Logger;
 import org.threeten.bp.LocalDateTime;
@@ -169,20 +168,16 @@ public class CalendarPanel extends UserP
 		JSONArray shortMonthes = new JSONArray();
 		JSONArray days = new JSONArray();
 		JSONArray shortDays = new JSONArray();
-		try {
-			// first week day must be Sunday
-			days.put(0, Application.getString(466));
-			shortDays.put(0, Application.getString(459));
-			for (int i = 0; i < 12; i++) {
-				monthes.put(i, Application.getString(469 + i));
-				shortMonthes.put(i, Application.getString(1556 + i));
-				if (i + 1 < 7) {
-					days.put(i + 1, Application.getString(460 + i));
-					shortDays.put(i + 1, Application.getString(453 + i));
-				}
+		// first week day must be Sunday
+		days.put(0, Application.getString(466));
+		shortDays.put(0, Application.getString(459));
+		for (int i = 0; i < 12; i++) {
+			monthes.put(i, Application.getString(469 + i));
+			shortMonthes.put(i, Application.getString(1556 + i));
+			if (i + 1 < 7) {
+				days.put(i + 1, Application.getString(460 + i));
+				shortDays.put(i + 1, Application.getString(453 + i));
 			}
-		} catch (JSONException e) {
-			log.error("Unexpected error while creating label lists", e);
 		}
 		options.set("monthNames", monthes.toString());
 		options.set("monthNamesShort", shortMonthes.toString());

Modified: openmeetings/application/branches/3.2.x/openmeetings-web/src/main/webapp/WEB-INF/classes/openmeetings-applicationContext.xml
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/webapp/WEB-INF/classes/openmeetings-applicationContext.xml?rev=1780531&r1=1780530&r2=1780531&view=diff
==============================================================================
--- openmeetings/application/branches/3.2.x/openmeetings-web/src/main/webapp/WEB-INF/classes/openmeetings-applicationContext.xml (original)
+++ openmeetings/application/branches/3.2.x/openmeetings-web/src/main/webapp/WEB-INF/classes/openmeetings-applicationContext.xml Fri Jan 27 10:01:04 2017
@@ -283,6 +283,8 @@
 			<ref bean="netTestWebService"/> <!-- JaxRs only -->
 		</jaxrs:serviceBeans>
 		<jaxrs:providers>
+			<bean id="appDtoMessageBodyWriter" class="org.apache.openmeetings.webservice.util.AppointmentMessageBodyWriter" />
+			<bean id="appDtoListMessageBodyWriter" class="org.apache.openmeetings.webservice.util.AppointmentListMessageBodyWriter" />
 			<bean id="omParamProvider" class="org.apache.openmeetings.webservice.util.OmParamConverterProvider"/>
 		</jaxrs:providers>
 	</jaxrs:server>

Modified: openmeetings/application/branches/3.2.x/openmeetings-web/src/test/java/org/apache/openmeetings/test/webservice/TestCalendarService.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/test/java/org/apache/openmeetings/test/webservice/TestCalendarService.java?rev=1780531&r1=1780530&r2=1780531&view=diff
==============================================================================
--- openmeetings/application/branches/3.2.x/openmeetings-web/src/test/java/org/apache/openmeetings/test/webservice/TestCalendarService.java (original)
+++ openmeetings/application/branches/3.2.x/openmeetings-web/src/test/java/org/apache/openmeetings/test/webservice/TestCalendarService.java Fri Jan 27 10:01:04 2017
@@ -46,8 +46,8 @@ import org.apache.openmeetings.db.entity
 import org.apache.openmeetings.db.entity.user.GroupUser;
 import org.apache.openmeetings.db.entity.user.User;
 import org.apache.openmeetings.webservice.util.AppointmentParamConverter;
-import org.apache.wicket.ajax.json.JSONArray;
-import org.apache.wicket.ajax.json.JSONObject;
+import org.json.JSONArray;
+import org.json.JSONObject;
 import org.junit.Test;
 import org.springframework.beans.factory.annotation.Autowired;
 

Modified: openmeetings/application/branches/3.2.x/openmeetings-web/src/test/java/org/apache/openmeetings/test/webservice/TestWebConverters.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/test/java/org/apache/openmeetings/test/webservice/TestWebConverters.java?rev=1780531&r1=1780530&r2=1780531&view=diff
==============================================================================
--- openmeetings/application/branches/3.2.x/openmeetings-web/src/test/java/org/apache/openmeetings/test/webservice/TestWebConverters.java (original)
+++ openmeetings/application/branches/3.2.x/openmeetings-web/src/test/java/org/apache/openmeetings/test/webservice/TestWebConverters.java Fri Jan 27 10:01:04 2017
@@ -29,7 +29,7 @@ import java.util.Date;
 import org.apache.openmeetings.db.dto.user.UserDTO;
 import org.apache.openmeetings.webservice.util.CalendarParamConverter;
 import org.apache.openmeetings.webservice.util.DateParamConverter;
-import org.apache.wicket.ajax.json.JSONObject;
+import org.json.JSONObject;
 import org.junit.Test;
 
 public class TestWebConverters {

Added: openmeetings/application/branches/3.2.x/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/util/AppointmentListMessageBodyWriter.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/util/AppointmentListMessageBodyWriter.java?rev=1780531&view=auto
==============================================================================
--- openmeetings/application/branches/3.2.x/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/util/AppointmentListMessageBodyWriter.java (added)
+++ openmeetings/application/branches/3.2.x/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/util/AppointmentListMessageBodyWriter.java Fri Jan 27 10:01:04 2017
@@ -0,0 +1,76 @@
+/*
+ * 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.webservice.util;
+
+import static org.apache.openmeetings.webservice.util.AppointmentParamConverter.ROOT;
+
+import java.io.IOException;
+import java.io.OutputStream;
+import java.io.PrintWriter;
+import java.io.Writer;
+import java.lang.annotation.Annotation;
+import java.lang.reflect.ParameterizedType;
+import java.lang.reflect.Type;
+import java.util.List;
+
+import javax.ws.rs.Produces;
+import javax.ws.rs.WebApplicationException;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.MultivaluedMap;
+import javax.ws.rs.ext.MessageBodyWriter;
+import javax.ws.rs.ext.Provider;
+
+import org.apache.openmeetings.db.dto.calendar.AppointmentDTO;
+import org.json.JSONArray;
+import org.json.JSONObject;
+
+@Provider
+@Produces({MediaType.APPLICATION_JSON})
+public class AppointmentListMessageBodyWriter implements MessageBodyWriter<List<AppointmentDTO>> {
+	@Override
+	public boolean isWriteable(Class<?> clazz, Type type, Annotation[] annotations, MediaType mediaType) {
+		if (type instanceof ParameterizedType) {
+			ParameterizedType pt = (ParameterizedType)type;
+			Type[] args = pt.getActualTypeArguments();
+			if (args != null && args.length == 1) {
+				return AppointmentDTO.class.equals(args[0]);
+			}
+		}
+		return false;
+	}
+
+	@Override
+	public long getSize(List<AppointmentDTO> t, Class<?> type, Type genericType, Annotation[] annotations, MediaType mediaType) {
+		return 0;
+	}
+
+	@Override
+	public void writeTo(List<AppointmentDTO> t, Class<?> type, Type genericType, Annotation[] annotations,
+			MediaType mediaType, MultivaluedMap<String, Object> httpHeaders, OutputStream out)
+			throws IOException, WebApplicationException
+	{
+		Writer writer = new PrintWriter(out);
+		JSONArray rr = new JSONArray();
+		for (AppointmentDTO dto : t) {
+			rr.put(AppointmentParamConverter.json(dto));
+		}
+		writer.write(new JSONObject().put(ROOT, rr).toString());
+		writer.flush();
+	}
+}

Added: openmeetings/application/branches/3.2.x/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/util/AppointmentMessageBodyWriter.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/util/AppointmentMessageBodyWriter.java?rev=1780531&view=auto
==============================================================================
--- openmeetings/application/branches/3.2.x/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/util/AppointmentMessageBodyWriter.java (added)
+++ openmeetings/application/branches/3.2.x/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/util/AppointmentMessageBodyWriter.java Fri Jan 27 10:01:04 2017
@@ -0,0 +1,62 @@
+/*
+ * 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.webservice.util;
+
+import static org.apache.openmeetings.webservice.util.AppointmentParamConverter.ROOT;
+
+import java.io.IOException;
+import java.io.OutputStream;
+import java.io.PrintWriter;
+import java.io.Writer;
+import java.lang.annotation.Annotation;
+import java.lang.reflect.Type;
+
+import javax.ws.rs.Produces;
+import javax.ws.rs.WebApplicationException;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.MultivaluedMap;
+import javax.ws.rs.ext.MessageBodyWriter;
+import javax.ws.rs.ext.Provider;
+
+import org.apache.openmeetings.db.dto.calendar.AppointmentDTO;
+import org.json.JSONObject;
+
+@Provider
+@Produces({MediaType.APPLICATION_JSON})
+public class AppointmentMessageBodyWriter implements MessageBodyWriter<AppointmentDTO> {
+	@Override
+	public boolean isWriteable(Class<?> clazz, Type type, Annotation[] annotations, MediaType mediaType) {
+		return AppointmentDTO.class.equals(type);
+	}
+
+	@Override
+	public long getSize(AppointmentDTO t, Class<?> type, Type genericType, Annotation[] annotations, MediaType mediaType) {
+		return 0;
+	}
+
+	@Override
+	public void writeTo(AppointmentDTO t, Class<?> type, Type genericType, Annotation[] annotations,
+			MediaType mediaType, MultivaluedMap<String, Object> httpHeaders, OutputStream out)
+			throws IOException, WebApplicationException
+	{
+		Writer writer = new PrintWriter(out);
+		writer.write(new JSONObject().put(ROOT, AppointmentParamConverter.json(t)).toString().toString());
+		writer.flush();
+	}
+}

Modified: openmeetings/application/branches/3.2.x/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/util/AppointmentParamConverter.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/util/AppointmentParamConverter.java?rev=1780531&r1=1780530&r2=1780531&view=diff
==============================================================================
--- openmeetings/application/branches/3.2.x/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/util/AppointmentParamConverter.java (original)
+++ openmeetings/application/branches/3.2.x/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/util/AppointmentParamConverter.java Fri Jan 27 10:01:04 2017
@@ -31,10 +31,12 @@ import org.apache.openmeetings.db.dto.ca
 import org.apache.openmeetings.db.dto.room.RoomDTO;
 import org.apache.openmeetings.db.dto.user.UserDTO;
 import org.apache.openmeetings.db.entity.calendar.Appointment.Reminder;
-import org.apache.wicket.ajax.json.JSONArray;
-import org.apache.wicket.ajax.json.JSONObject;
+import org.json.JSONArray;
+import org.json.JSONObject;
 
 public class AppointmentParamConverter implements ParamConverter<AppointmentDTO> {
+	public static final String ROOT = "appointmentDTO";
+
 	@Override
 	public AppointmentDTO fromString(String val) {
 		JSONObject o = new JSONObject(val);
@@ -49,7 +51,7 @@ public class AppointmentParamConverter i
 		a.setDescription(o.optString("description"));
 		a.setInserted(DateParamConverter.get(o.optString("inserted")));
 		a.setUpdated(DateParamConverter.get(o.optString("updated")));
-		a.setDeleted(o.optBoolean("inserted"));
+		a.setDeleted(o.optBoolean("deleted"));
 		a.setReminder(optEnum(Reminder.class, o, "reminder"));
 		a.setRoom(RoomDTO.get(o.optJSONObject("room")));
 		a.setIcalId(o.optString("icalId"));
@@ -69,22 +71,11 @@ public class AppointmentParamConverter i
 
 	public static JSONObject json(AppointmentDTO val) {
 		Date i = val.getInserted(), u = val.getUpdated();
-		JSONObject o = new JSONObject(val)
-				.put("owner", UserDTO.json(val.getOwner()))
-				.put("room", RoomDTO.json(val.getRoom()))
-				.put("reminder", val.getReminder() == null ? null : val.getReminder().name())
+		return new JSONObject(val)
 				.put("start", ISO8601_FULL_FORMAT.format(val.getStart()))
 				.put("end", ISO8601_FULL_FORMAT.format(val.getEnd()))
 				.put("inserted", i == null ? null : ISO8601_FULL_FORMAT.format(i))
 				.put("updated", u == null ? null : ISO8601_FULL_FORMAT.format(u));
-		if (val.getMeetingMembers() != null) {
-			JSONArray rr = new JSONArray();
-			for(MeetingMemberDTO mm : val.getMeetingMembers()) {
-				rr.put(MeetingMemberDTO.json(mm));
-			}
-			o.put("meetingMembers", rr);
-		}
-		return o;
 	}
 
 	@Override

Modified: openmeetings/application/trunk/openmeetings-db/pom.xml
URL: http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-db/pom.xml?rev=1780531&r1=1780530&r2=1780531&view=diff
==============================================================================
--- openmeetings/application/trunk/openmeetings-db/pom.xml (original)
+++ openmeetings/application/trunk/openmeetings-db/pom.xml Fri Jan 27 10:01:04 2017
@@ -112,6 +112,11 @@
 			<artifactId>postgresql</artifactId>
 			<version>${postgresql.version}</version>
 		</dependency>
+		<dependency>
+			<groupId>com.tdunning</groupId>
+			<artifactId>json</artifactId>
+			<version>1.8</version> <!-- FIXME need to be removed with update to wicket-8.x -->
+		</dependency>
 	</dependencies>
 	<build>
 		<plugins>

Modified: openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/user/UserDao.java
URL: http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/user/UserDao.java?rev=1780531&r1=1780530&r2=1780531&view=diff
==============================================================================
--- openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/user/UserDao.java (original)
+++ openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/user/UserDao.java Fri Jan 27 10:01:04 2017
@@ -47,6 +47,7 @@ import org.apache.openjpa.persistence.Op
 import org.apache.openjpa.persistence.OpenJPAQuery;
 import org.apache.openmeetings.db.dao.IGroupAdminDataProviderDao;
 import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
+import org.apache.openmeetings.db.dao.label.LabelDao;
 import org.apache.openmeetings.db.entity.user.Address;
 import org.apache.openmeetings.db.entity.user.GroupUser;
 import org.apache.openmeetings.db.entity.user.User;
@@ -67,9 +68,9 @@ import org.springframework.transaction.a
 
 /**
  * CRUD operations for {@link User}
- * 
+ *
  * @author swagner, solomax, vasya
- * 
+ *
  */
 @Transactional
 public class UserDao implements IGroupAdminDataProviderDao<User> {
@@ -97,7 +98,7 @@ public class UserDao implements IGroupAd
 	/**
 	 * Get a new instance of the {@link User} entity, with all default values
 	 * set
-	 * 
+	 *
 	 * @param currentUser - the user to copy time zone from
 	 * @return new User instance
 	 */
@@ -126,11 +127,11 @@ public class UserDao implements IGroupAd
 		q.setMaxResults(count);
 		return q.getResultList();
 	}
-	
+
 	private static String getAdditionalJoin(boolean filterContacts) {
 		return filterContacts ? "LEFT JOIN u.groupUsers ou" : null;
 	}
-	
+
 	private static String getAdditionalWhere(boolean excludeContacts, Map<String, Object> params) {
 		if (excludeContacts) {
 			params.put("contact", Type.contact);
@@ -138,7 +139,7 @@ public class UserDao implements IGroupAd
 		}
 		return null;
 	}
-	
+
 	private static String getAdditionalWhere(boolean filterContacts, Long ownerId, Map<String, Object> params) {
 		if (filterContacts) {
 			params.put("ownerId", ownerId);
@@ -148,7 +149,7 @@ public class UserDao implements IGroupAd
 		}
 		return null;
 	}
-	
+
 	private static void setAdditionalParams(TypedQuery<?> q, Map<String, Object> params) {
 		for (Map.Entry<String, Object> me: params.entrySet()) {
 			q.setParameter(me.getKey(), me.getValue());
@@ -240,7 +241,7 @@ public class UserDao implements IGroupAd
 		}
 		return u;
 	}
-	
+
 	//this method is required to be able to drop reset hash
 	public User resetPassword(User u, String password) throws NoSuchAlgorithmException {
 		if (u != null) {
@@ -249,7 +250,7 @@ public class UserDao implements IGroupAd
 		}
 		return u;
 	}
-	
+
 	// TODO: Why the password field is not set via the Model is because its
 	// FetchType is Lazy, this extra hook here might be not needed with a
 	// different mechanism to protect the password from being read
@@ -264,17 +265,17 @@ public class UserDao implements IGroupAd
 		}
 		return u;
 	}
-	
+
 	@Override
 	public User get(Long id) {
 		return get(id, false);
 	}
-	
+
 	@Override
 	public User get(long id) {
 		return get(Long.valueOf(id), false);
 	}
-	
+
 	private User get(Long id, boolean force) {
 		User u = null;
 		if (id != null && id.longValue() > 0) {
@@ -344,7 +345,7 @@ public class UserDao implements IGroupAd
 
 	/**
 	 * check for duplicates
-	 * 
+	 *
 	 * @param login
 	 * @param type
 	 * @param domainId
@@ -363,7 +364,7 @@ public class UserDao implements IGroupAd
 
 	/**
 	 * Checks if a mail is already taken by someone else
-	 * 
+	 *
 	 * @param email
 	 * @param type
 	 * @param domainId
@@ -384,7 +385,7 @@ public class UserDao implements IGroupAd
 	public boolean validLogin(String login) {
 		return !Strings.isEmpty(login) && login.length() >= UserHelper.getMinLoginLength(cfgDao);
 	}
-	
+
 	public User getByLogin(String login, Type type, Long domainId) {
 		User u = null;
 		try {
@@ -457,7 +458,7 @@ public class UserDao implements IGroupAd
 
 	/**
 	 * Returns true if the password is correct
-	 * 
+	 *
 	 * @param userId
 	 * @param password
 	 * @return
@@ -474,19 +475,19 @@ public class UserDao implements IGroupAd
 	public User getContact(String email, Long ownerId) {
 		return getContact(email, "", "", ownerId);
 	}
-	
+
 	public User getContact(String email, User owner) {
 		return getContact(email, "", "", null, null, owner);
 	}
-	
+
 	public User getContact(String email, String firstName, String lastName, Long ownerId) {
 		return getContact(email, firstName, lastName, null, null, get(ownerId));
 	}
-	
+
 	public User getContact(String email, String firstName, String lastName, Long langId, String tzId, Long ownerId) {
 		return getContact(email, firstName, lastName, langId, tzId, get(ownerId));
 	}
-	
+
 	public User getContact(String email, String firstName, String lastName, Long langId, String tzId, User owner) {
 		User to = null;
 		try {
@@ -502,11 +503,11 @@ public class UserDao implements IGroupAd
 			to.setLogin(login.length() < getMinLoginLength(cfgDao) ? UUID.randomUUID().toString() : login);
 			to.setFirstname(firstName);
 			to.setLastname(lastName);
-			to.setLanguageId(null == langId ? owner.getLanguageId() : langId.longValue());
+			to.setLanguageId(null == langId || null == LabelDao.languages.get(langId) ? owner.getLanguageId() : langId.longValue());
 			to.setOwnerId(owner.getId());
 			to.setAddress(new Address());
 			to.getAddress().setEmail(email);
-			to.setTimeZoneId(null == tzId ? owner.getTimeZoneId() : tzId);
+			to.setTimeZoneId(Strings.isEmpty(tzId) ? owner.getTimeZoneId() : tzId);
 		}
 		return to;
 	}
@@ -532,7 +533,7 @@ public class UserDao implements IGroupAd
 		Map<String, Object> params = new HashMap<String, Object>();
 		boolean filterContacts = true;
 		boolean count = clazz.isAssignableFrom(Long.class);
-		
+
 		StringBuilder sb = new StringBuilder("SELECT ");
 		sb.append(count ? "COUNT(" : "").append("u").append(count ? ") " : " ")
 			.append("FROM User u ").append(getAdditionalJoin(filterContacts)).append(" WHERE u.deleted = false AND ")
@@ -560,11 +561,11 @@ public class UserDao implements IGroupAd
 		setAdditionalParams(query, params);
 		return query;
 	}
-	
+
 	private static String getStringParam(String param) {
 		return param == null ? "%" : "%" + StringUtils.lowerCase(param) + "%";
 	}
-	
+
 	public List<User> searchUserProfile(Long userId, String text, String offers, String search, String orderBy, int start, int max, boolean asc) {
 		return getUserProfileQuery(User.class, userId, text, offers, search, orderBy, asc).setFirstResult(start).setMaxResults(max).getResultList();
 	}
@@ -589,7 +590,7 @@ public class UserDao implements IGroupAd
 	public List<User> get(String search, int start, int count, String order) {
 		return get(search, start, count, order, false, Long.valueOf(-1));
 	}
-	
+
 	public Set<Right> getRights(Long id) {
 		Set<Right> rights = new HashSet<Right>();
 
@@ -608,14 +609,14 @@ public class UserDao implements IGroupAd
 		}
 		return rights;
 	}
-	
+
 	/**
 	 * login logic
-	 * 
+	 *
 	 * @param userOrEmail: login or email of the user being tested
 	 * @param userpass: password of the user being tested
 	 * @return User object in case of successful login
-	 * @throws OmException in case of any issue 
+	 * @throws OmException in case of any issue
 	 */
 	public User login(String userOrEmail, String userpass) throws OmException {
 		List<User> users = em.createNamedQuery("getUserByLoginOrEmail", User.class)
@@ -645,11 +646,11 @@ public class UserDao implements IGroupAd
 			log.debug("No Group assigned: {}", u);
 			throw new OmException("No Group assigned to user");
 		}
-		
+
 		u.setLastlogin(new Date());
 		return update(u, u.getId());
 	}
-	
+
 	public Address getAddress(String street, String zip, String town, String country, String additionalname, String fax, String phone, String email) {
 		Address a =  new Address();
 		a.setStreet(street);
@@ -663,12 +664,12 @@ public class UserDao implements IGroupAd
 		a.setEmail(email);
 		return a;
 	}
-	
+
 	public User addUser(Set<Right> rights, String firstname, String login, String lastname, long languageId,
 			String userpass, Address adress, boolean sendSMS, Date age, String hash, TimeZone timezone,
 			boolean forceTimeZoneCheck, String userOffers, String userSearchs, boolean showContactData,
 			boolean showContactDataToContacts, String externalId, String externalType, List<Long> groupIds, String pictureuri) throws NoSuchAlgorithmException, UnsupportedEncodingException {
-		
+
 		User u = new User();
 		u.setFirstname(firstname);
 		u.setLogin(login);
@@ -706,7 +707,7 @@ public class UserDao implements IGroupAd
 				u.getGroupUsers().add(new GroupUser(groupDao.get(grpId), u));
 			}
 		}
-		
+
 		return update(u, null);
 	}
 }

Modified: openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/calendar/AppointmentDTO.java
URL: http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/calendar/AppointmentDTO.java?rev=1780531&r1=1780530&r2=1780531&view=diff
==============================================================================
--- openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/calendar/AppointmentDTO.java (original)
+++ openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/calendar/AppointmentDTO.java Fri Jan 27 10:01:04 2017
@@ -37,7 +37,7 @@ import org.apache.openmeetings.db.entity
 import org.apache.openmeetings.db.entity.calendar.Appointment.Reminder;
 import org.apache.openmeetings.db.entity.calendar.MeetingMember;
 import org.apache.openmeetings.db.entity.user.User;
-import org.apache.wicket.ajax.json.JSONObject;
+import org.json.JSONObject;
 
 @XmlRootElement
 @XmlAccessorType(XmlAccessType.FIELD)
@@ -108,12 +108,27 @@ public class AppointmentDTO implements S
 		a.setReminder(reminder);
 		a.setRoom(room.get());
 		a.setIcalId(icalId);
-		a.setMeetingMembers(new ArrayList<MeetingMember>());
+		List<MeetingMember> mml = new ArrayList<>();
 		for(MeetingMemberDTO mm : meetingMembers) {
-			MeetingMember m = mm.get(userDao, u);
-			m.setAppointment(a);
-			a.getMeetingMembers().add(m);
+			MeetingMember m = null;
+			if (mm.getId() != null) {
+				//if ID is NOT null it should already be in the list
+				for (MeetingMember m1 : a.getMeetingMembers()) {
+					if (m1.getId().equals(mm.getId())) {
+						m = m1;
+						break;
+					}
+				}
+				if (m == null) {
+					throw new RuntimeException("Weird guest from different appointment is passed");
+				}
+			} else {
+				m = mm.get(userDao, u);
+				m.setAppointment(a);
+			}
+			mml.add(m);
 		}
+		a.setMeetingMembers(mml);
 		a.setLanguageId(languageId);
 		a.setPasswordProtected(passwordProtected);
 		a.setConnectedEvent(connectedEvent);

Modified: openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/calendar/MeetingMemberDTO.java
URL: http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/calendar/MeetingMemberDTO.java?rev=1780531&r1=1780530&r2=1780531&view=diff
==============================================================================
--- openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/calendar/MeetingMemberDTO.java (original)
+++ openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/calendar/MeetingMemberDTO.java Fri Jan 27 10:01:04 2017
@@ -30,8 +30,8 @@ import org.apache.openmeetings.db.dao.us
 import org.apache.openmeetings.db.dto.user.UserDTO;
 import org.apache.openmeetings.db.entity.calendar.MeetingMember;
 import org.apache.openmeetings.db.entity.user.User;
-import org.apache.wicket.ajax.json.JSONObject;
 import org.apache.wicket.util.string.Strings;
+import org.json.JSONObject;
 
 @XmlRootElement
 @XmlAccessorType(XmlAccessType.FIELD)
@@ -104,15 +104,8 @@ public class MeetingMemberDTO implements
 		return m;
 	}
 
-	public static JSONObject json(MeetingMemberDTO mm) {
-		JSONObject m = new JSONObject();
-		m.put("id", mm.getId());
-		m.put("user", UserDTO.json(mm.getUser()));
-		return m;
-	}
-
 	@Override
 	public String toString() {
-		return json(this).toString();
+		return new JSONObject(this).toString();
 	}
 }

Modified: openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/room/RoomDTO.java
URL: http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/room/RoomDTO.java?rev=1780531&r1=1780530&r2=1780531&view=diff
==============================================================================
--- openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/room/RoomDTO.java (original)
+++ openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/room/RoomDTO.java Fri Jan 27 10:01:04 2017
@@ -18,9 +18,9 @@
  */
 package org.apache.openmeetings.db.dto.room;
 
-import static org.apache.openmeetings.db.dto.room.RoomOptionsDTO.optInt;
 import static org.apache.openmeetings.db.util.DtoHelper.optEnum;
 import static org.apache.openmeetings.db.util.DtoHelper.optEnumList;
+import static org.apache.openmeetings.db.util.DtoHelper.optInt;
 import static org.apache.openmeetings.db.util.DtoHelper.optLong;
 
 import java.io.Serializable;
@@ -35,8 +35,8 @@ import javax.xml.bind.annotation.XmlRoot
 
 import org.apache.openmeetings.db.entity.room.Room;
 import org.apache.openmeetings.db.entity.room.Room.RoomElement;
-import org.apache.wicket.ajax.json.JSONArray;
-import org.apache.wicket.ajax.json.JSONObject;
+import org.json.JSONObject;
+
 @XmlRootElement
 @XmlAccessorType(XmlAccessType.FIELD)
 public class RoomDTO implements Serializable {
@@ -313,15 +313,6 @@ public class RoomDTO implements Serializ
 		return r;
 	}
 
-	public static JSONObject json(RoomDTO r) {
-		JSONArray rr = new JSONArray();
-		for (RoomElement h : r.getHiddenElements()) {
-			rr.put(h.name());
-		}
-		return new JSONObject(r).put("hiddenElements", rr)
-				.put("type", r.getType().name());
-	}
-
 	@Override
 	public String toString() {
 		return new JSONObject(this).toString();

Modified: openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/room/RoomOptionsDTO.java
URL: http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/room/RoomOptionsDTO.java?rev=1780531&r1=1780530&r2=1780531&view=diff
==============================================================================
--- openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/room/RoomOptionsDTO.java (original)
+++ openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/room/RoomOptionsDTO.java Fri Jan 27 10:01:04 2017
@@ -26,7 +26,7 @@ import javax.xml.bind.annotation.XmlAcce
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlRootElement;
 
-import org.apache.wicket.ajax.json.JSONObject;
+import org.json.JSONObject;
 
 @XmlRootElement
 @XmlAccessorType(XmlAccessType.FIELD)
@@ -89,10 +89,6 @@ public class RoomOptionsDTO implements S
 		this.allowRecording = allowRecording;
 	}
 
-	public static Integer optInt(JSONObject o, String key) {
-		return o.has(key) && !o.isNull(key) ? o.getInt(key) : null;
-	}
-
 	public static RoomOptionsDTO fromString(String s) {
 		JSONObject o = new JSONObject(s);
 		RoomOptionsDTO ro = new RoomOptionsDTO();

Modified: openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/user/ExternalUserDTO.java
URL: http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/user/ExternalUserDTO.java?rev=1780531&r1=1780530&r2=1780531&view=diff
==============================================================================
--- openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/user/ExternalUserDTO.java (original)
+++ openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/user/ExternalUserDTO.java Fri Jan 27 10:01:04 2017
@@ -24,7 +24,7 @@ import javax.xml.bind.annotation.XmlAcce
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlRootElement;
 
-import org.apache.wicket.ajax.json.JSONObject;
+import org.json.JSONObject;
 
 @XmlRootElement
 @XmlAccessorType(XmlAccessType.FIELD)
@@ -95,7 +95,7 @@ public class ExternalUserDTO implements
 	public void setExternalType(String externalType) {
 		this.externalType = externalType;
 	}
-	
+
 	public static ExternalUserDTO fromString(String s) {
 		JSONObject o = new JSONObject(s);
 		ExternalUserDTO u = new ExternalUserDTO();
@@ -108,7 +108,7 @@ public class ExternalUserDTO implements
 		u.profilePictureUrl = o.optString("profilePictureUrl", null);
 		return u;
 	}
-	
+
 	@Override
 	public String toString() {
 		return new JSONObject(this).toString();

Modified: openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/user/UserDTO.java
URL: http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/user/UserDTO.java?rev=1780531&r1=1780530&r2=1780531&view=diff
==============================================================================
--- openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/user/UserDTO.java (original)
+++ openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/user/UserDTO.java Fri Jan 27 10:01:04 2017
@@ -35,8 +35,7 @@ import org.apache.openmeetings.db.entity
 import org.apache.openmeetings.db.entity.user.User;
 import org.apache.openmeetings.db.entity.user.User.Right;
 import org.apache.openmeetings.db.entity.user.User.Type;
-import org.apache.wicket.ajax.json.JSONArray;
-import org.apache.wicket.ajax.json.JSONObject;
+import org.json.JSONObject;
 
 @XmlRootElement
 public class UserDTO implements Serializable {
@@ -214,14 +213,4 @@ public class UserDTO implements Serializ
 		u.type = optEnum(Type.class, o, "type");
 		return u;
 	}
-
-	public static JSONObject json(UserDTO u) {
-		JSONObject o = new JSONObject(u)
-				.put("type", u.getType().name());
-		JSONArray rr = new JSONArray();
-		for (Right r : u.getRights()) {
-			rr.put(r.name());
-		}
-		return o.put("rights", rr);
-	}
 }

Modified: openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/util/DtoHelper.java
URL: http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/util/DtoHelper.java?rev=1780531&r1=1780530&r2=1780531&view=diff
==============================================================================
--- openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/util/DtoHelper.java (original)
+++ openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/util/DtoHelper.java Fri Jan 27 10:01:04 2017
@@ -21,10 +21,14 @@ package org.apache.openmeetings.db.util;
 import java.util.ArrayList;
 import java.util.Collection;
 
-import org.apache.wicket.ajax.json.JSONArray;
-import org.apache.wicket.ajax.json.JSONObject;
+import org.json.JSONArray;
+import org.json.JSONObject;
 
 public class DtoHelper {
+	public static Integer optInt(JSONObject o, String key) {
+		return o.has(key) && !o.isNull(key) ? o.getInt(key) : null;
+	}
+
 	public static Long optLong(JSONObject o, String key) {
 		return o.has(key) && !o.isNull(key) ? o.getLong(key) : null;
 	}

Modified: openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileItemTree.java
URL: http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileItemTree.java?rev=1780531&r1=1780530&r2=1780531&view=diff
==============================================================================
--- openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileItemTree.java (original)
+++ openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileItemTree.java Fri Jan 27 10:01:04 2017
@@ -26,7 +26,6 @@ import org.apache.wicket.Component;
 import org.apache.wicket.MarkupContainer;
 import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.apache.wicket.ajax.attributes.AjaxRequestAttributes;
-import org.apache.wicket.ajax.json.JSONObject;
 import org.apache.wicket.ajax.markup.html.AjaxLink;
 import org.apache.wicket.extensions.markup.html.repeater.tree.DefaultNestedTree;
 import org.apache.wicket.extensions.markup.html.repeater.tree.ITreeProvider;
@@ -35,6 +34,7 @@ import org.apache.wicket.markup.repeater
 import org.apache.wicket.model.IModel;
 import org.apache.wicket.model.Model;
 import org.apache.wicket.util.string.Strings;
+import org.json.JSONObject;
 
 public class FileItemTree extends DefaultNestedTree<FileItem> {
 	private static final long serialVersionUID = 1L;