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 [2/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...

Modified: openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/SignInPage.java
URL: http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/SignInPage.java?rev=1780531&r1=1780530&r2=1780531&view=diff
==============================================================================
--- openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/SignInPage.java (original)
+++ openmeetings/application/trunk/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/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/SwfPanel.java
URL: http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/SwfPanel.java?rev=1780531&r1=1780530&r2=1780531&view=diff
==============================================================================
--- openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/SwfPanel.java (original)
+++ openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/SwfPanel.java Fri Jan 27 10:01:04 2017
@@ -22,8 +22,6 @@ import static org.apache.wicket.RuntimeC
 
 import org.apache.openmeetings.web.app.Application;
 import org.apache.openmeetings.web.common.BasePanel;
-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;
@@ -35,17 +33,19 @@ import org.apache.wicket.request.resourc
 import org.apache.wicket.request.resource.ResourceReference;
 import org.apache.wicket.util.string.StringValue;
 import org.apache.wicket.util.string.Strings;
+import org.json.JSONArray;
+import org.json.JSONObject;
 
 public class SwfPanel extends BasePanel {
 	private static final long serialVersionUID = 1L;
 	public static final String SWF = "swf";
 	public static final String SWF_TYPE_NETWORK = "network";
 	public static final String SWF_TYPE_SETTINGS = "settings";
-	
+
 	public SwfPanel(String id) {
 		this(id, new PageParameters());
 	}
-	
+
 	public String getInitFunction() {
 		return getInitFunction(new PageParameters());
 	}

Modified: openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/RoomSidebar.java
URL: http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/RoomSidebar.java?rev=1780531&r1=1780530&r2=1780531&view=diff
==============================================================================
--- openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/RoomSidebar.java (original)
+++ openmeetings/application/trunk/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/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/ChatPanel.java
URL: http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/ChatPanel.java?rev=1780531&r1=1780530&r2=1780531&view=diff
==============================================================================
--- openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/ChatPanel.java (original)
+++ openmeetings/application/trunk/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/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/calendar/CalendarPanel.java
URL: http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/calendar/CalendarPanel.java?rev=1780531&r1=1780530&r2=1780531&view=diff
==============================================================================
--- openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/calendar/CalendarPanel.java (original)
+++ openmeetings/application/trunk/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/trunk/openmeetings-web/src/main/webapp/WEB-INF/classes/openmeetings-applicationContext.xml
URL: http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/main/webapp/WEB-INF/classes/openmeetings-applicationContext.xml?rev=1780531&r1=1780530&r2=1780531&view=diff
==============================================================================
--- openmeetings/application/trunk/openmeetings-web/src/main/webapp/WEB-INF/classes/openmeetings-applicationContext.xml (original)
+++ openmeetings/application/trunk/openmeetings-web/src/main/webapp/WEB-INF/classes/openmeetings-applicationContext.xml Fri Jan 27 10:01:04 2017
@@ -281,6 +281,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/trunk/openmeetings-web/src/test/java/org/apache/openmeetings/test/webservice/TestCalendarService.java
URL: http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/test/java/org/apache/openmeetings/test/webservice/TestCalendarService.java?rev=1780531&r1=1780530&r2=1780531&view=diff
==============================================================================
--- openmeetings/application/trunk/openmeetings-web/src/test/java/org/apache/openmeetings/test/webservice/TestCalendarService.java (original)
+++ openmeetings/application/trunk/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/trunk/openmeetings-web/src/test/java/org/apache/openmeetings/test/webservice/TestWebConverters.java
URL: http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/test/java/org/apache/openmeetings/test/webservice/TestWebConverters.java?rev=1780531&r1=1780530&r2=1780531&view=diff
==============================================================================
--- openmeetings/application/trunk/openmeetings-web/src/test/java/org/apache/openmeetings/test/webservice/TestWebConverters.java (original)
+++ openmeetings/application/trunk/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/trunk/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/util/AppointmentListMessageBodyWriter.java
URL: http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/util/AppointmentListMessageBodyWriter.java?rev=1780531&view=auto
==============================================================================
--- openmeetings/application/trunk/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/util/AppointmentListMessageBodyWriter.java (added)
+++ openmeetings/application/trunk/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/trunk/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/util/AppointmentMessageBodyWriter.java
URL: http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/util/AppointmentMessageBodyWriter.java?rev=1780531&view=auto
==============================================================================
--- openmeetings/application/trunk/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/util/AppointmentMessageBodyWriter.java (added)
+++ openmeetings/application/trunk/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/trunk/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/util/AppointmentParamConverter.java
URL: http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/util/AppointmentParamConverter.java?rev=1780531&r1=1780530&r2=1780531&view=diff
==============================================================================
--- openmeetings/application/trunk/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/util/AppointmentParamConverter.java (original)
+++ openmeetings/application/trunk/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