r1273 - in trunk: . src/main/java/cc/kune/core/client src/main/java/cc/kune/core/client/rpcservices src/main/java/cc/kune/core/public src/main/java/cc/kune/core/shared/dto src/main/java/cc/kune/wave/client src/main/java/cc/kune/wave/server src/main/java/cc/ourproject/kune/core/client src/main/java/org/ourproject/kune/platf/server/rpc
Author: vjrj_ Date: 2011-03-13 21:51:48 +0100 (Sun, 13 Mar 2011) New Revision: 1273 Added: trunk/src/main/java/cc/kune/core/shared/dto/WaveClientParams.java trunk/src/main/java/cc/kune/wave/client/WaveClientManager.java Removed: trunk/src/main/java/cc/kune/wave/server/ServerRpcControllerImpl.java trunk/src/main/java/cc/ourproject/kune/core/client/services/ Modified: trunk/INSTALL trunk/src/main/java/cc/kune/core/client/CoreGinModule.java trunk/src/main/java/cc/kune/core/client/CoreParts.java trunk/src/main/java/cc/kune/core/client/rpcservices/UserService.java trunk/src/main/java/cc/kune/core/client/rpcservices/UserServiceAsync.java trunk/src/main/java/cc/kune/core/public/ws.html trunk/src/main/java/cc/kune/wave/client/WaveClientSimpleAuthenticator.java trunk/src/main/java/cc/kune/wave/client/WebClient.java trunk/src/main/java/cc/kune/wave/client/WebClient.ui.xml trunk/src/main/java/cc/kune/wave/server/CustomUserRegistrationServlet.java trunk/src/main/java/cc/kune/wave/server/CustomWaveClientServlet.java trunk/src/main/java/cc/kune/wave/server/WaveMain.java trunk/src/main/java/org/ourproject/kune/platf/server/rpc/UserRPC.java Log: NEW - # 33: WIAB Client integration http://kune.ourproject.org/issues/ticket/33 Modified: trunk/INSTALL =================================================================== --- trunk/INSTALL 2011-03-13 14:44:03 UTC (rev 1272) +++ trunk/INSTALL 2011-03-13 20:51:48 UTC (rev 1273) @@ -105,7 +105,7 @@ Run the server for the first time and initialize the db: - mvn exec:java -Dliquibase.should.run=false + mvn exec:java Once started for the first time the db is initialized. Then you should stop (Ctrl-C) and start the db migration process: Modified: trunk/src/main/java/cc/kune/core/client/CoreGinModule.java =================================================================== --- trunk/src/main/java/cc/kune/core/client/CoreGinModule.java 2011-03-13 14:44:03 UTC (rev 1272) +++ trunk/src/main/java/cc/kune/core/client/CoreGinModule.java 2011-03-13 20:51:48 UTC (rev 1273) @@ -101,6 +101,7 @@ import cc.kune.gspace.client.WsArmorImpl; import cc.kune.msgs.client.UserMessagesPanel; import cc.kune.msgs.client.UserMessagesPresenter; +import cc.kune.wave.client.WaveClientManager; import com.google.gwt.event.shared.EventBus; import com.google.inject.Singleton; @@ -194,6 +195,7 @@ bind(CookiesManager.class).to(CookiesManagerImpl.class).in(Singleton.class); bind(BeforeSignOut.class).in(Singleton.class); bind(SiteTokenListeners.class).asEagerSingleton(); + bind(WaveClientManager.class).in(Singleton.class); bind(CoreParts.class).asEagerSingleton(); // SN Modified: trunk/src/main/java/cc/kune/core/client/CoreParts.java =================================================================== --- trunk/src/main/java/cc/kune/core/client/CoreParts.java 2011-03-13 14:44:03 UTC (rev 1272) +++ trunk/src/main/java/cc/kune/core/client/CoreParts.java 2011-03-13 20:51:48 UTC (rev 1273) @@ -3,12 +3,13 @@ import cc.kune.core.client.init.AppStartEvent; import cc.kune.core.client.init.AppStartEvent.AppStartHandler; import cc.kune.core.client.sitebar.SiteUserOptionsPresenter; +import cc.kune.core.client.sn.GroupSNPresenter; import cc.kune.core.client.sn.UserSNPresenter; -import cc.kune.core.client.sn.GroupSNPresenter; import cc.kune.core.client.sn.actions.registry.GroupSNConfActions; import cc.kune.core.client.sn.actions.registry.UserSNConfActions; import cc.kune.core.client.state.Session; import cc.kune.core.client.ui.footer.license.EntityLicensePresenter; +import cc.kune.wave.client.WaveClientManager; import com.google.inject.Inject; import com.google.inject.Provider; @@ -20,7 +21,7 @@ final Provider<UserSNPresenter> buddiesAndParticipationPresenter, final Provider<GroupSNConfActions> groupMembersConfActions, final Provider<UserSNConfActions> userSNConfActions, final Provider<SiteUserOptionsPresenter> userOptions, - final Provider<EntityLicensePresenter> licenseFooter) { + final Provider<EntityLicensePresenter> licenseFooter, final Provider<WaveClientManager> waveClientManager) { session.onInitDataReceived(true, new AppStartHandler() { @Override public void onAppStart(final AppStartEvent event) { @@ -30,6 +31,7 @@ buddiesAndParticipationPresenter.get(); userOptions.get(); licenseFooter.get(); + waveClientManager.get(); } }); } Modified: trunk/src/main/java/cc/kune/core/client/rpcservices/UserService.java =================================================================== --- trunk/src/main/java/cc/kune/core/client/rpcservices/UserService.java 2011-03-13 14:44:03 UTC (rev 1272) +++ trunk/src/main/java/cc/kune/core/client/rpcservices/UserService.java 2011-03-13 20:51:48 UTC (rev 1273) @@ -24,6 +24,7 @@ import cc.kune.core.shared.domain.utils.StateToken; import cc.kune.core.shared.dto.UserDTO; import cc.kune.core.shared.dto.UserInfoDTO; +import cc.kune.core.shared.dto.WaveClientParams; import com.google.gwt.user.client.rpc.RemoteService; import com.google.gwt.user.client.rpc.RemoteServiceRelativePath; @@ -45,4 +46,6 @@ void setBuddiesVisibility(String userHash, StateToken groupToken, UserSNetVisibility visibility); + WaveClientParams getWaveClientParameters(String userHash); + } Modified: trunk/src/main/java/cc/kune/core/client/rpcservices/UserServiceAsync.java =================================================================== --- trunk/src/main/java/cc/kune/core/client/rpcservices/UserServiceAsync.java 2011-03-13 14:44:03 UTC (rev 1272) +++ trunk/src/main/java/cc/kune/core/client/rpcservices/UserServiceAsync.java 2011-03-13 20:51:48 UTC (rev 1273) @@ -23,6 +23,7 @@ import cc.kune.core.shared.domain.utils.StateToken; import cc.kune.core.shared.dto.UserDTO; import cc.kune.core.shared.dto.UserInfoDTO; +import cc.kune.core.shared.dto.WaveClientParams; import com.google.gwt.user.client.rpc.AsyncCallback; @@ -32,6 +33,8 @@ void getUserAvatarBaser64(String userHash, StateToken userToken, AsyncCallback<String> asyncCallback); + void getWaveClientParameters(String userHash, AsyncCallback<WaveClientParams> asyncCallback); + void login(String nickOrEmail, String passwd, String waveCookieValue, AsyncCallback<UserInfoDTO> asyncCallback); void logout(String userHash, AsyncCallback<Void> asyncCallback); @@ -42,5 +45,4 @@ void setBuddiesVisibility(String userHash, StateToken groupToken, UserSNetVisibility visibility, AsyncCallback<Void> asyncCallback); - } Modified: trunk/src/main/java/cc/kune/core/public/ws.html =================================================================== --- trunk/src/main/java/cc/kune/core/public/ws.html 2011-03-13 14:44:03 UTC (rev 1272) +++ trunk/src/main/java/cc/kune/core/public/ws.html 2011-03-13 20:51:48 UTC (rev 1273) @@ -36,16 +36,6 @@ } }); </script> -<!-- Only for wave testing --> -<script type="text/javascript" language="javascript"> - var __session = { - "id" : "TK8O7UyqvT", - "address" : "kune@localhost", - "domain" : "localhost" - }; - var __client_flags = {}; - var __useSocketIO = true; -</script> <link href='http://fonts.googleapis.com/css?family=Ubuntu:regular,italic,bold,bolditalic' rel='stylesheet' type='text/css'> Added: trunk/src/main/java/cc/kune/core/shared/dto/WaveClientParams.java =================================================================== --- trunk/src/main/java/cc/kune/core/shared/dto/WaveClientParams.java (rev 0) +++ trunk/src/main/java/cc/kune/core/shared/dto/WaveClientParams.java 2011-03-13 20:51:48 UTC (rev 1273) @@ -0,0 +1,43 @@ +package cc.kune.core.shared.dto; + +import com.google.gwt.user.client.rpc.IsSerializable; + +public class WaveClientParams implements IsSerializable { + private String clientFlags; + private String sessionJSON; + private boolean useSocketIO; + + public WaveClientParams() { + } + + public WaveClientParams(final String sessionJSON, final String clientFlags, final boolean useSocketIO) { + this.sessionJSON = sessionJSON; + this.clientFlags = clientFlags; + this.useSocketIO = useSocketIO; + } + + public String getClientFlags() { + return clientFlags; + } + + public String getSessionJSON() { + return sessionJSON; + } + + public boolean useSocketIO() { + return useSocketIO; + } + + public void setClientFlags(final String clientFlags) { + this.clientFlags = clientFlags; + } + + public void setSessionJSON(final String sessionJSON) { + this.sessionJSON = sessionJSON; + } + + public void setUseSocketIO(final boolean useSocketIO) { + this.useSocketIO = useSocketIO; + } + +} \ No newline at end of file Property changes on: trunk/src/main/java/cc/kune/core/shared/dto/WaveClientParams.java ___________________________________________________________________ Name: svn:mime-type + text/plain Added: trunk/src/main/java/cc/kune/wave/client/WaveClientManager.java =================================================================== --- trunk/src/main/java/cc/kune/wave/client/WaveClientManager.java (rev 0) +++ trunk/src/main/java/cc/kune/wave/client/WaveClientManager.java 2011-03-13 20:51:48 UTC (rev 1273) @@ -0,0 +1,88 @@ +package cc.kune.wave.client; + +import org.waveprotocol.box.webclient.client.ClientEvents; +import org.waveprotocol.box.webclient.client.events.NetworkStatusEvent; +import org.waveprotocol.box.webclient.client.events.NetworkStatusEventHandler; + +import cc.kune.common.client.noti.NotifyUser; +import cc.kune.core.client.rpcservices.AsyncCallbackSimple; +import cc.kune.core.client.rpcservices.UserServiceAsync; +import cc.kune.core.client.state.Session; +import cc.kune.core.client.state.StateManager; +import cc.kune.core.client.state.UserSignInEvent; +import cc.kune.core.client.state.UserSignInEvent.UserSignInHandler; +import cc.kune.core.client.state.UserSignOutEvent; +import cc.kune.core.client.state.UserSignOutEvent.UserSignOutHandler; +import cc.kune.core.shared.dto.WaveClientParams; +import cc.kune.gspace.client.WsArmor; + +import com.google.gwt.core.client.JavaScriptObject; +import com.google.gwt.core.client.JsonUtils; +import com.google.gwt.user.client.ui.InsertPanel.ForIsWidget; +import com.google.inject.Inject; + +public class WaveClientManager { + @Inject + public WaveClientManager(final Session session, final StateManager stateManager, + final UserServiceAsync userService, final WsArmor wsArmor) { + session.onUserSignIn(true, new UserSignInHandler() { + @Override + public void onUserSignIn(final UserSignInEvent event) { + userService.getWaveClientParameters(session.getUserHash(), new AsyncCallbackSimple<WaveClientParams>() { + private WebClient webClient; + + @Override + public void onSuccess(final WaveClientParams result) { + // NotifyUser.info(result.getSessionJSON(), true); + setUseSocketIO(result.useSocketIO()); + setSessionJSON(JsonUtils.safeEval(result.getSessionJSON())); + setClientFlags(JsonUtils.safeEval(result.getClientFlags())); + // Only for testing: + final ForIsWidget userSpace = wsArmor.getUserSpace(); + if (userSpace.getWidgetCount() > 0) { + userSpace.remove(0); + } + if (webClient == null) { + webClient = new WebClient(); + userSpace.add(webClient); + } + } + }); + } + }); + session.onUserSignOut(true, new UserSignOutHandler() { + @Override + public void onUserSignOut(final UserSignOutEvent event) { + } + }); + ClientEvents.get().addNetworkStatusEventHandler(new NetworkStatusEventHandler() { + @Override + public void onNetworkStatus(NetworkStatusEvent event) { + switch (event.getStatus()) { + case CONNECTED: + case RECONNECTED: + NotifyUser.info("Online"); + break; + case DISCONNECTED: + NotifyUser.info("Offline"); + break; + case RECONNECTING: + NotifyUser.showProgress("Connecting"); + break; + } + } + }); + } + + private native void setClientFlags(JavaScriptObject object) /*-{ + $wnd.__client_flags = object; + }-*/; + + private native void setSessionJSON(JavaScriptObject object) /*-{ + $wnd.__session = object; + }-*/; + + private native void setUseSocketIO(boolean use) /*-{ + $wnd.__useSocketIO = use; + }-*/; +} Property changes on: trunk/src/main/java/cc/kune/wave/client/WaveClientManager.java ___________________________________________________________________ Name: svn:mime-type + text/plain Modified: trunk/src/main/java/cc/kune/wave/client/WaveClientSimpleAuthenticator.java =================================================================== --- trunk/src/main/java/cc/kune/wave/client/WaveClientSimpleAuthenticator.java 2011-03-13 14:44:03 UTC (rev 1272) +++ trunk/src/main/java/cc/kune/wave/client/WaveClientSimpleAuthenticator.java 2011-03-13 20:51:48 UTC (rev 1273) @@ -43,12 +43,6 @@ @Override public void onResponseReceived(final Request request, final Response response) { callback.onSuccess(null); - // Only for testing: - // final ForIsWidget userSpace = wsArmor.getUserSpace(); - // if (userSpace.getWidgetCount() > 0) { - // userSpace.remove(0); - // } - // userSpace.add(new WebClient()); } }); } catch (final RequestException e) { Modified: trunk/src/main/java/cc/kune/wave/client/WebClient.java =================================================================== --- trunk/src/main/java/cc/kune/wave/client/WebClient.java 2011-03-13 14:44:03 UTC (rev 1272) +++ trunk/src/main/java/cc/kune/wave/client/WebClient.java 2011-03-13 20:51:48 UTC (rev 1273) @@ -46,7 +46,6 @@ import org.waveprotocol.box.webclient.search.SimpleSearch; import org.waveprotocol.box.webclient.search.WaveStore; import org.waveprotocol.box.webclient.util.Log; -import org.waveprotocol.box.webclient.widget.error.ErrorIndicatorPresenter; import org.waveprotocol.wave.client.account.ProfileManager; import org.waveprotocol.wave.client.account.impl.ProfileManagerImpl; import org.waveprotocol.wave.client.common.safehtml.SafeHtml; @@ -59,6 +58,8 @@ import org.waveprotocol.wave.model.wave.ParticipantId; import org.waveprotocol.wave.model.waveref.WaveRef; +import cc.kune.common.client.noti.NotifyUser; + import com.google.gwt.core.client.GWT; import com.google.gwt.core.client.GWT.UncaughtExceptionHandler; import com.google.gwt.dom.client.Document; @@ -71,7 +72,6 @@ import com.google.gwt.user.client.History; import com.google.gwt.user.client.ui.Composite; import com.google.gwt.user.client.ui.DockLayoutPanel; -import com.google.gwt.user.client.ui.RootPanel; import com.google.gwt.user.client.ui.SplitLayoutPanel; /** @@ -239,12 +239,10 @@ * Returns <code>ws://yourhost[:port]/</code>. */ // XXX check formatting wrt GPE - private native String getWebSocketBaseUrl(String moduleBase) /*-{ - return "ws" + /:\/\/[^\/]+/.exec(moduleBase)[0] + "/"; -}-*/; + private native String getWebSocketBaseUrl(String moduleBase) /*-{return "ws" + /:\/\/[^\/]+/.exec(moduleBase)[0] + "/";}-*/; private native boolean useSocketIO() /*-{ - return !!$wnd.__useSocketIO + return !!$wnd.__useSocketIO }-*/; /** @@ -316,12 +314,13 @@ public void onUncaughtException(Throwable e) { if (!hasFired) { hasFired = true; - final ErrorIndicatorPresenter error = - ErrorIndicatorPresenter.create(RootPanel.get("banner")); + // final ErrorIndicatorPresenter error = + // ErrorIndicatorPresenter.create(RootPanel.get("banner")); getStackTraceAsync(e, new Accessor<SafeHtml>() { @Override public void use(SafeHtml stack) { - error.addDetail(stack, null); + NotifyUser.error("Error in wave client", true); + // error.addDetail(stack, null); } }); } Modified: trunk/src/main/java/cc/kune/wave/client/WebClient.ui.xml =================================================================== --- trunk/src/main/java/cc/kune/wave/client/WebClient.ui.xml 2011-03-13 14:44:03 UTC (rev 1272) +++ trunk/src/main/java/cc/kune/wave/client/WebClient.ui.xml 2011-03-13 20:51:48 UTC (rev 1273) @@ -58,7 +58,7 @@ <d:DebugMessagePanel ui:field="logPanel" addStyleNames="{style.subPanel} {style.debugPanel}" /> </g:south> <g:west size="400"> - <s:SearchPanelWidget ui:field="searchPanel"/> + <s:SearchPanelWidget ui:field="searchPanel"/> </g:west> <g:center> <w:ImplPanel ui:field="contentPanel"/> @@ -66,4 +66,4 @@ </g:SplitLayoutPanel> </g:center> </g:DockLayoutPanel> -</ui:UiBinder> \ No newline at end of file +</ui:UiBinder> Modified: trunk/src/main/java/cc/kune/wave/server/CustomUserRegistrationServlet.java =================================================================== --- trunk/src/main/java/cc/kune/wave/server/CustomUserRegistrationServlet.java 2011-03-13 14:44:03 UTC (rev 1272) +++ trunk/src/main/java/cc/kune/wave/server/CustomUserRegistrationServlet.java 2011-03-13 20:51:48 UTC (rev 1273) @@ -42,7 +42,7 @@ /** * The user registration servlet allows new users to register accounts. - * + * * @author [email protected] (Joseph Gentle) */ public class CustomUserRegistrationServlet extends HttpServlet { Modified: trunk/src/main/java/cc/kune/wave/server/CustomWaveClientServlet.java =================================================================== --- trunk/src/main/java/cc/kune/wave/server/CustomWaveClientServlet.java 2011-03-13 14:44:03 UTC (rev 1272) +++ trunk/src/main/java/cc/kune/wave/server/CustomWaveClientServlet.java 2011-03-13 20:51:48 UTC (rev 1273) @@ -1,3 +1,4 @@ +// @formatter:off /** * Copyright 2010 Google Inc. * @@ -34,6 +35,7 @@ import org.waveprotocol.box.server.authentication.SessionManager; import org.waveprotocol.box.server.gxp.TopBar; import org.waveprotocol.box.server.gxp.WaveClientPage; +import org.waveprotocol.box.server.rpc.WaveClientServlet; import org.waveprotocol.box.server.util.RandomBase64Generator; import org.waveprotocol.wave.client.util.ClientFlagsBase; import org.waveprotocol.wave.common.bootstrap.FlagConstants; @@ -43,142 +45,143 @@ import com.google.common.collect.Maps; import com.google.gxp.base.GxpContext; import com.google.inject.Inject; +import com.google.inject.Singleton; import com.google.inject.name.Named; /** * The HTTP servlet for serving a wave client along with content generated on * the server. - * + * * @author [email protected] (Benjamin Kalman) */ +@Singleton public class CustomWaveClientServlet extends HttpServlet { - private static final HashMap<String, String> FLAG_MAP = Maps.newHashMap(); + private static final Log LOG = Log.get(WaveClientServlet.class); - private static final Log LOG = Log.get(CustomWaveClientServlet.class); - static { - // __NAME_MAPPING__ is a map of name to obfuscated id - for (int i = 0; i < FlagConstants.__NAME_MAPPING__.length; i += 2) { - FLAG_MAP.put(FlagConstants.__NAME_MAPPING__[i], FlagConstants.__NAME_MAPPING__[i + 1]); - } + private static final HashMap<String, String> FLAG_MAP = Maps.newHashMap(); + static { + // __NAME_MAPPING__ is a map of name to obfuscated id + for (int i = 0; i < FlagConstants.__NAME_MAPPING__.length; i += 2) { + FLAG_MAP.put(FlagConstants.__NAME_MAPPING__[i], FlagConstants.__NAME_MAPPING__[i + 1]); } + } - private final String domain; - private final SessionManager sessionManager; - private final Boolean useSocketIO; + private final String domain; + private final Boolean useSocketIO; + private final SessionManager sessionManager; - /** - * Creates a servlet for the wave client. - */ - @Inject - public CustomWaveClientServlet(@Named(CoreSettings.WAVE_SERVER_DOMAIN) final String domain, - @Named(CoreSettings.USE_SOCKETIO) final Boolean useSocketIO, final SessionManager sessionManager) { - this.domain = domain; - this.useSocketIO = useSocketIO; - this.sessionManager = sessionManager; - } + /** + * Creates a servlet for the wave client. + */ + @Inject + public CustomWaveClientServlet( + @Named(CoreSettings.WAVE_SERVER_DOMAIN) String domain, + @Named(CoreSettings.USE_SOCKETIO) Boolean useSocketIO, + SessionManager sessionManager) { + this.domain = domain; + this.useSocketIO = useSocketIO; + this.sessionManager = sessionManager; + } - @Override - protected void doGet(final HttpServletRequest request, final HttpServletResponse response) throws IOException { - final ParticipantId id = sessionManager.getLoggedInUser(request.getSession(false)); + @Override + protected void doGet(HttpServletRequest request, HttpServletResponse response) + throws IOException { + ParticipantId id = sessionManager.getLoggedInUser(request.getSession(false)); - // Eventually, it would be nice to show users who aren't logged in the - // public waves., - // However, public waves aren't implemented yet. For now, we'll just - // redirect users - // who haven't signed in to the sign in page. - // COMMENTED (vjrj) - if (id == null) { - response.sendRedirect(sessionManager.getLoginUrl("/")); - return; - } + // Eventually, it would be nice to show users who aren't logged in the public waves. + // However, public waves aren't implemented yet. For now, we'll just redirect users + // who haven't signed in to the sign in page. + //if (id == null) { + // response.sendRedirect(sessionManager.getLoginUrl("/")); + // return; + //} - String username = null; - String userDomain = null; - if (id != null) { - final String[] parts = id.getAddress().split("@"); - username = parts[0]; - userDomain = id.getDomain(); - } + String username = null; + String userDomain = null; + if (id != null) { + String[] parts = id.getAddress().split("@"); + username = parts[0]; + userDomain = id.getDomain(); + } - try { - WaveClientPage.write(response.getWriter(), new GxpContext(request.getLocale()), - getSessionJson(request.getSession(false)), getClientFlags(request), - TopBar.getGxpClosure(username, userDomain), useSocketIO); - } catch (final IOException e) { - LOG.warning("Failed to write GXP for request " + request, e); - response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR); - return; - } - - response.setContentType("text/html"); - response.setStatus(HttpServletResponse.SC_OK); + try { + WaveClientPage.write(response.getWriter(), new GxpContext(request.getLocale()), + getSessionJson(request.getSession(false)), getClientFlags(request), + TopBar.getGxpClosure(username, userDomain), useSocketIO); + } catch (IOException e) { + LOG.warning("Failed to write GXP for request " + request, e); + response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR); + return; } - private JSONObject getClientFlags(final HttpServletRequest request) { - try { - final JSONObject ret = new JSONObject(); + response.setContentType("text/html"); + response.setStatus(HttpServletResponse.SC_OK); + } - final Enumeration<?> iter = request.getParameterNames(); - while (iter.hasMoreElements()) { - final String name = (String) iter.nextElement(); - final String value = request.getParameter(name); + public JSONObject getClientFlags(HttpServletRequest request) { + try { + JSONObject ret = new JSONObject(); - if (FLAG_MAP.containsKey(name)) { - // Set using the correct type of data in the json using - // reflection - try { - final Method getter = ClientFlagsBase.class.getMethod(name); - final Class<?> retType = getter.getReturnType(); + Enumeration<?> iter = request.getParameterNames(); + while (iter.hasMoreElements()) { + String name = (String) iter.nextElement(); + String value = request.getParameter(name); - if (retType.equals(String.class)) { - ret.put(FLAG_MAP.get(name), value); - } else if (retType.equals(Integer.class)) { - ret.put(FLAG_MAP.get(name), Integer.parseInt(value)); - } else if (retType.equals(Boolean.class)) { - ret.put(FLAG_MAP.get(name), Boolean.parseBoolean(value)); - } else if (retType.equals(Float.class)) { - ret.put(FLAG_MAP.get(name), Float.parseFloat(value)); - } else if (retType.equals(Double.class)) { - ret.put(FLAG_MAP.get(name), Double.parseDouble(value)); - } else { - // Flag exists, but its type is unknown, so it can - // not be - // properly encoded in JSON. - LOG.warning("Ignoring flag [" + name + "] with unknown return type: " + retType); - } + if (FLAG_MAP.containsKey(name)) { + // Set using the correct type of data in the json using reflection + try { + Method getter = ClientFlagsBase.class.getMethod(name); + Class<?> retType = getter.getReturnType(); - // Ignore the flag on any exception - } catch (final SecurityException ex) { - } catch (final NoSuchMethodException ex) { - LOG.warning("Failed to find the flag [" + name + "] in ClientFlagsBase."); - } catch (final NumberFormatException ex) { - } - } + if (retType.equals(String.class)) { + ret.put(FLAG_MAP.get(name), value); + } else if (retType.equals(Integer.class)) { + ret.put(FLAG_MAP.get(name), Integer.parseInt(value)); + } else if (retType.equals(Boolean.class)) { + ret.put(FLAG_MAP.get(name), Boolean.parseBoolean(value)); + } else if (retType.equals(Float.class)) { + ret.put(FLAG_MAP.get(name), Float.parseFloat(value)); + } else if (retType.equals(Double.class)) { + ret.put(FLAG_MAP.get(name), Double.parseDouble(value)); + } else { + // Flag exists, but its type is unknown, so it can not be + // properly encoded in JSON. + LOG.warning("Ignoring flag [" + name + "] with unknown return type: " + retType); } - return ret; - } catch (final JSONException ex) { - LOG.severe("Failed to create flags JSON"); - return new JSONObject(); + // Ignore the flag on any exception + } catch (SecurityException ex) { + } catch (NoSuchMethodException ex) { + LOG.warning("Failed to find the flag [" + name + "] in ClientFlagsBase."); + } catch (NumberFormatException ex) { + } } + } + + return ret; + } catch (JSONException ex) { + LOG.severe("Failed to create flags JSON"); + return new JSONObject(); } + } - private JSONObject getSessionJson(final HttpSession session) { - try { - final ParticipantId user = sessionManager.getLoggedInUser(session); - final String address = (user != null) ? user.getAddress() : null; + public JSONObject getSessionJson(HttpSession session) { + try { + ParticipantId user = sessionManager.getLoggedInUser(session); + String address = (user != null) ? user.getAddress() : null; - // TODO(zdwang): Figure out a proper session id rather than - // generating a - // random number - final String sessionId = (new RandomBase64Generator()).next(10); + // TODO(zdwang): Figure out a proper session id rather than generating a + // random number + String sessionId = (new RandomBase64Generator()).next(10); - return new JSONObject().put(SessionConstants.DOMAIN, domain).putOpt(SessionConstants.ADDRESS, address).putOpt( - SessionConstants.ID_SEED, sessionId); - } catch (final JSONException e) { - LOG.severe("Failed to create session JSON"); - return new JSONObject(); - } + return new JSONObject() + .put(SessionConstants.DOMAIN, domain) + .putOpt(SessionConstants.ADDRESS, address) + .putOpt(SessionConstants.ID_SEED, sessionId); + } catch (JSONException e) { + LOG.severe("Failed to create session JSON"); + return new JSONObject(); } + } } Deleted: trunk/src/main/java/cc/kune/wave/server/ServerRpcControllerImpl.java =================================================================== --- trunk/src/main/java/cc/kune/wave/server/ServerRpcControllerImpl.java 2011-03-13 14:44:03 UTC (rev 1272) +++ trunk/src/main/java/cc/kune/wave/server/ServerRpcControllerImpl.java 2011-03-13 20:51:48 UTC (rev 1273) @@ -1,226 +0,0 @@ -/** - * Copyright 2009 Google Inc. - * - * Licensed 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 cc.kune.wave.server; - -import org.waveprotocol.box.server.rpc.Rpc; -import org.waveprotocol.box.server.rpc.ServerRpcController; -import org.waveprotocol.wave.model.wave.ParticipantId; - -import com.google.protobuf.Descriptors; -import com.google.protobuf.Message; -import com.google.protobuf.RpcCallback; -import com.google.protobuf.Service; - -/** - * Implements the server end-point of a wave server RPC connection. This is a - * single-use RPC controller. - * - * - */ -public class ServerRpcControllerImpl implements ServerRpcController { - private final Service backingService; - private final RpcCallback<Message> callback; - private RpcCallback<Object> cancelCallback = null; - private boolean cancelled = false; - private boolean complete = false; - - private final boolean isStreamingRpc; - private final ParticipantId loggedInUser; - private final Message requestMessage; - private final Descriptors.MethodDescriptor serviceMethod; - // The following variables represent the current status of this instance, - // and - // must all only be accessed or modified while synchronised on statusLock. - private final Object statusLock = new Object(); - - /** - * Instantiate a new ServerRpcController that may later be completely - * invoked by calling {#link run}. - * - * @param requestMessage - * the request being handled - * @param backingService - * the backing service type - * @param serviceMethod - * the specific method within the backing service type - * @param loggedInUser - * the currently logged in user - * @param callback - * the destination where responses may be passed - may be called - * once (normal RPC) or 1-n times (streaming RPC), and will pass - * instances of RpcFinished as required (error cases, or - * streaming RPC shutdown); is also always called under the - * ServerRpcController's statusLock to ensure that consecutive - * calls (in the streaming case) are called in series - */ - ServerRpcControllerImpl(final Message requestMessage, final Service backingService, - final Descriptors.MethodDescriptor serviceMethod, final ParticipantId loggedInUser, - final RpcCallback<Message> callback) { - this.requestMessage = requestMessage; - this.backingService = backingService; - this.serviceMethod = serviceMethod; - this.loggedInUser = loggedInUser; - this.isStreamingRpc = serviceMethod.getOptions().getExtension(Rpc.isStreamingRpc); - this.callback = callback; - } - - @Override - public void cancel() { - RpcCallback<Object> runCallback = null; - synchronized (statusLock) { - if (cancelled) { - throw new IllegalStateException("Can't cancel RPC, already cancelled."); - } - cancelled = true; - if (cancelCallback != null && !complete) { - runCallback = cancelCallback; - } - } - if (runCallback != null) { - runCallback.run(null); - } - } - - @Override - public String errorText() { - throw new UnsupportedOperationException("Client-side method of RpcController only."); - } - - @Override - public boolean failed() { - throw new UnsupportedOperationException("Client-side method of RpcController only."); - } - - @Override - public ParticipantId getLoggedInUser() { - return loggedInUser; - } - - @Override - public boolean isCanceled() { - return cancelled; - } - - /** - * Registers a cancellation callback. This will always be called as part of - * this RPC, and always at most once; either when the client asks to cancel - * it, or when the RPC finishes (regardless of error case). - * - * This callback will be called outside normal locks on ServerRpcController - * state, i.e., not within a block synchronised on statusLock. - */ - @Override - public void notifyOnCancel(final RpcCallback<Object> callback) { - RpcCallback<Object> runCallback = null; - synchronized (statusLock) { - if (cancelCallback != null) { - throw new IllegalStateException("Must only be called once per request."); - } else { - cancelCallback = callback; - if (cancelled || complete) { - runCallback = cancelCallback; - } - } - } - if (runCallback != null) { - runCallback.run(null); - } - } - - @Override - public void reset() { - throw new UnsupportedOperationException("Client-side method of RpcController only."); - } - - /** - * Run this ServerRpcController in the current thread. This must only be - * invoked ONCE, and will throw an IllegalStateException otherwise. - */ - @Override - public void run() { - final RpcCallback<Message> messageCallback = new RpcCallback<Message>() { - @Override - public void run(Message result) { // NOPMD by vjrj on 12/02/11 0:16 - RpcCallback<Object> runCallback = null; - synchronized (statusLock) { - if (complete) { - throw new IllegalStateException("Can't send responses over this RPC, as it is" - + " already complete: " + result); - } - if (!isStreamingRpc || result == null) { - // This either completes the streaming RPC (by passing - // an instance - // of RpcFinished in place of null) or completes a - // normal RPC (by - // passing any other message). - if (result == null) { - result = Rpc.RpcFinished.newBuilder().setFailed(false).build(); - } - callback.run(result); - - // Now complete, mark as such and invoke the - // cancellation callback. - complete = true; - if (cancelCallback != null && !cancelled) { - runCallback = cancelCallback; - } - } else { - // Streaming RPC update. - callback.run(result); - } - } - if (runCallback != null) { - runCallback.run(null); - } - } - }; - try { - backingService.callMethod(serviceMethod, this, requestMessage, messageCallback); - } catch (final RuntimeException e) { - // Pass the description of any RuntimeException back to the caller. - e.printStackTrace(); - if (!complete) { - setFailed(e.toString()); - } - } - } - - @Override - public void setFailed(final String reason) { - RpcCallback<Object> runCallback = null; - synchronized (statusLock) { - if (complete) { - throw new IllegalStateException("Can't fail this RPC, as it is already complete."); - } else { - complete = true; - callback.run(Rpc.RpcFinished.newBuilder().setFailed(true).setErrorText(reason).build()); - if (cancelCallback != null && !cancelled) { - runCallback = cancelCallback; - } - } - } - if (runCallback != null) { - runCallback.run(null); - } - } - - @Override - public void startCancel() { - throw new UnsupportedOperationException("Client-side method of RpcController only."); - } -} Modified: trunk/src/main/java/cc/kune/wave/server/WaveMain.java =================================================================== --- trunk/src/main/java/cc/kune/wave/server/WaveMain.java 2011-03-13 14:44:03 UTC (rev 1272) +++ trunk/src/main/java/cc/kune/wave/server/WaveMain.java 2011-03-13 20:51:48 UTC (rev 1273) @@ -1,3 +1,5 @@ +// @formatter:off + /** * Copyright 2009 Google Inc. * @@ -67,134 +69,136 @@ */ public class WaveMain { - private static final Log LOG = Log.get(WaveMain.class); + /** + * This is the name of the system property used to find the server config file. + */ + private static final String PROPERTIES_FILE_KEY = "wave.server.config"; - /** - * This is the name of the system property used to find the server config - * file. - */ - private static final String PROPERTIES_FILE_KEY = "wave.server.config"; + private static final Log LOG = Log.get(WaveMain.class); - private static Module buildFederationModule(final Injector settingsInjector, final boolean enableFederation) - throws ConfigurationException { - Module federationModule; - if (enableFederation) { - federationModule = settingsInjector.getInstance(XmppFederationModule.class); - } else { - federationModule = settingsInjector.getInstance(NoOpFederationModule.class); - } - return federationModule; + public static void main(String... args) { + try { + Module coreSettings = SettingsBinder.bindSettings(PROPERTIES_FILE_KEY, CoreSettings.class); + run(coreSettings); + return; + } catch (PersistenceException e) { + LOG.severe("PersistenceException when running server:", e); + } catch (ConfigurationException e) { + LOG.severe("ConfigurationException when running server:", e); + } catch (WaveServerException e) { + LOG.severe("WaveServerException when running server:", e); } + } - private static void initializeFederation(final Injector injector) { - final FederationTransport federationManager = injector.getInstance(FederationTransport.class); - federationManager.startFederation(); + public static void run(Module coreSettings) throws PersistenceException, + ConfigurationException, WaveServerException { + Injector settingsInjector = Guice.createInjector(coreSettings); + boolean enableFederation = settingsInjector.getInstance(Key.get(Boolean.class, + Names.named(CoreSettings.ENABLE_FEDERATION))); + + if (enableFederation) { + Module federationSettings = + SettingsBinder.bindSettings(PROPERTIES_FILE_KEY, FederationSettings.class); + // This MUST happen first, or bindings will fail if federation is enabled. + settingsInjector = settingsInjector.createChildInjector(federationSettings); } - private static void initializeFrontend(final Injector injector, final ServerRpcProvider server, - final WaveBus waveBus) throws WaveServerException { - final HashedVersionFactory hashFactory = injector.getInstance(HashedVersionFactory.class); - final WaveletProvider provider = injector.getInstance(WaveletProvider.class); - final ClientFrontend frontend = ClientFrontendImpl.create(hashFactory, provider, waveBus); + Module federationModule = buildFederationModule(settingsInjector, enableFederation); + PersistenceModule persistenceModule = settingsInjector.getInstance(PersistenceModule.class); + Injector injector = + settingsInjector.createChildInjector(new ServerModule(enableFederation), + new RobotApiModule(), federationModule, persistenceModule); - final ProtocolWaveClientRpc.Interface rpcImpl = WaveClientRpcImpl.create(frontend, false); - server.registerService(ProtocolWaveClientRpc.newReflectiveService(rpcImpl)); - } + ServerRpcProvider server = injector.getInstance(ServerRpcProvider.class); + WaveBus waveBus = injector.getInstance(WaveBus.class); - private static void initializeRobots(final Injector injector, final WaveBus waveBus) { - final RobotsGateway robotsGateway = injector.getInstance(RobotsGateway.class); - waveBus.subscribe(robotsGateway); - } + initializeServer(injector); + initializeServlets(injector, server); + initializeRobots(injector, waveBus); + initializeFrontend(injector, server, waveBus); + initializeFederation(injector); - private static void initializeServer(final Injector injector) throws PersistenceException, WaveServerException { - final AccountStore accountStore = injector.getInstance(AccountStore.class); - accountStore.initializeAccountStore(); - AccountStoreHolder.init(accountStore, - injector.getInstance(Key.get(String.class, Names.named(CoreSettings.WAVE_SERVER_DOMAIN)))); + LOG.info("Starting server"); + server.startWebSocketServer(injector); + } - // Initialize the SignerInfoStore. - final CertPathStore certPathStore = injector.getInstance(CertPathStore.class); - if (certPathStore instanceof SignerInfoStore) { - ((SignerInfoStore) certPathStore).initializeSignerInfoStore(); - } - - // Initialize the server. - final WaveletProvider waveServer = injector.getInstance(WaveletProvider.class); - waveServer.initialize(); + private static Module buildFederationModule(Injector settingsInjector, boolean enableFederation) + throws ConfigurationException { + Module federationModule; + if (enableFederation) { + federationModule = settingsInjector.getInstance(XmppFederationModule.class); + } else { + federationModule = settingsInjector.getInstance(NoOpFederationModule.class); } + return federationModule; + } - private static void initializeServlets(final Injector injector, final ServerRpcProvider server) { - server.addServlet("/attachment/*", injector.getInstance(AttachmentServlet.class)); + private static void initializeServer(Injector injector) throws PersistenceException, + WaveServerException { + AccountStore accountStore = injector.getInstance(AccountStore.class); + accountStore.initializeAccountStore(); + AccountStoreHolder.init(accountStore, + injector.getInstance(Key.get(String.class, Names.named(CoreSettings.WAVE_SERVER_DOMAIN)))); - server.addServlet(SessionManager.SIGN_IN_URL, injector.getInstance(AuthenticationServlet.class)); - server.addServlet("/auth/signout", injector.getInstance(SignOutServlet.class)); - server.addServlet("/auth/register", injector.getInstance(CustomUserRegistrationServlet.class)); + // Initialize the SignerInfoStore. + CertPathStore certPathStore = injector.getInstance(CertPathStore.class); + if (certPathStore instanceof SignerInfoStore) { + ((SignerInfoStore)certPathStore).initializeSignerInfoStore(); + } - server.addServlet("/fetch/*", injector.getInstance(FetchServlet.class)); + // Initialize the server. + WaveletProvider waveServer = injector.getInstance(WaveletProvider.class); + waveServer.initialize(); + } - server.addServlet("/search/*", injector.getInstance(SearchServlet.class)); + private static void initializeServlets(Injector injector, ServerRpcProvider server) { + server.addServlet("/attachment/*", injector.getInstance(AttachmentServlet.class)); - server.addServlet("/robot/dataapi", injector.getInstance(DataApiServlet.class)); - server.addServlet(DataApiOAuthServlet.DATA_API_OAUTH_PATH + "/*", - injector.getInstance(DataApiOAuthServlet.class)); - server.addServlet("/robot/dataapi/rpc", injector.getInstance(DataApiServlet.class)); - server.addServlet("/robot/register/*", injector.getInstance(RobotRegistrationServlet.class)); - server.addServlet("/robot/rpc", injector.getInstance(ActiveApiServlet.class)); + server.addServlet(SessionManager.SIGN_IN_URL, + injector.getInstance(AuthenticationServlet.class)); + server.addServlet("/auth/signout", injector.getInstance(SignOutServlet.class)); + server.addServlet("/auth/register", injector.getInstance(CustomUserRegistrationServlet.class)); - final String gadgetServerHostname = injector.getInstance(Key.get(String.class, - Names.named(CoreSettings.GADGET_SERVER_HOSTNAME))); - final ProxyServlet.Transparent proxyServlet = new ProxyServlet.Transparent("/gadgets", "http", - gadgetServerHostname, injector.getInstance(Key.get(int.class, - Names.named(CoreSettings.GADGET_SERVER_PORT))), "/gadgets"); - final ServletHolder proxyServletHolder = server.addServlet("/gadgets/*", proxyServlet); - proxyServletHolder.setInitParameter("HostHeader", gadgetServerHostname); + server.addServlet("/fetch/*", injector.getInstance(FetchServlet.class)); - // server.addServlet("/", - // injector.getInstance(CustomWaveClientServlet.class)); - } + server.addServlet("/search/*", injector.getInstance(SearchServlet.class)); - public static void main(final String... args) { - try { - final Module coreSettings = SettingsBinder.bindSettings(PROPERTIES_FILE_KEY, CoreSettings.class); - run(coreSettings); - return; - } catch (final PersistenceException e) { - LOG.severe("PersistenceException when running server:", e); - } catch (final ConfigurationException e) { - LOG.severe("ConfigurationException when running server:", e); - } catch (final WaveServerException e) { - LOG.severe("WaveServerException when running server:", e); - } - } + server.addServlet("/robot/dataapi", injector.getInstance(DataApiServlet.class)); + server.addServlet(DataApiOAuthServlet.DATA_API_OAUTH_PATH + "/*", + injector.getInstance(DataApiOAuthServlet.class)); + server.addServlet("/robot/dataapi/rpc", injector.getInstance(DataApiServlet.class)); + server.addServlet("/robot/register/*", injector.getInstance(RobotRegistrationServlet.class)); + server.addServlet("/robot/rpc", injector.getInstance(ActiveApiServlet.class)); - public static void run(final Module coreSettings) throws PersistenceException, ConfigurationException, - WaveServerException { - Injector settingsInjector = Guice.createInjector(coreSettings); - final boolean enableFederation = settingsInjector.getInstance(Key.get(Boolean.class, - Names.named(CoreSettings.ENABLE_FEDERATION))); + String gadgetServerHostname =injector.getInstance(Key.get(String.class, + Names.named(CoreSettings.GADGET_SERVER_HOSTNAME))); + ProxyServlet.Transparent proxyServlet = + new ProxyServlet.Transparent("/gadgets", "http", gadgetServerHostname, injector + .getInstance(Key.get(int.class, Names.named(CoreSettings.GADGET_SERVER_PORT))), + "/gadgets"); + ServletHolder proxyServletHolder = server.addServlet("/gadgets/*", proxyServlet); + proxyServletHolder.setInitParameter("HostHeader", gadgetServerHostname); - if (enableFederation) { - final Module federationSettings = SettingsBinder.bindSettings(PROPERTIES_FILE_KEY, FederationSettings.class); - // This MUST happen first, or bindings will fail if federation is - // enabled. - settingsInjector = settingsInjector.createChildInjector(federationSettings); - } + // server.addServlet("/", injector.getInstance(CustomWaveClientServlet.class)); + } - final Module federationModule = buildFederationModule(settingsInjector, enableFederation); - final PersistenceModule persistenceModule = settingsInjector.getInstance(PersistenceModule.class); - final Injector injector = settingsInjector.createChildInjector(new ServerModule(enableFederation), - new RobotApiModule(), federationModule, persistenceModule); + private static void initializeRobots(Injector injector, WaveBus waveBus) { + RobotsGateway robotsGateway = injector.getInstance(RobotsGateway.class); + waveBus.subscribe(robotsGateway); + } - final ServerRpcProvider server = injector.getInstance(ServerRpcProvider.class); - final WaveBus waveBus = injector.getInstance(WaveBus.class); + private static void initializeFrontend(Injector injector, ServerRpcProvider server, + WaveBus waveBus) throws WaveServerException { + HashedVersionFactory hashFactory = injector.getInstance(HashedVersionFactory.class); + WaveletProvider provider = injector.getInstance(WaveletProvider.class); + ClientFrontend frontend = ClientFrontendImpl.create(hashFactory, provider, waveBus); - initializeServer(injector); - initializeServlets(injector, server); - initializeRobots(injector, waveBus); - initializeFrontend(injector, server, waveBus); - initializeFederation(injector); + ProtocolWaveClientRpc.Interface rpcImpl = WaveClientRpcImpl.create(frontend, false); + server.registerService(ProtocolWaveClientRpc.newReflectiveService(rpcImpl)); + } - LOG.info("Starting server"); - server.startWebSocketServer(injector); - } + private static void initializeFederation(Injector injector) { + FederationTransport federationManager = injector.getInstance(FederationTransport.class); + federationManager.startFederation(); + } } Modified: trunk/src/main/java/org/ourproject/kune/platf/server/rpc/UserRPC.java =================================================================== --- trunk/src/main/java/org/ourproject/kune/platf/server/rpc/UserRPC.java 2011-03-13 14:44:03 UTC (rev 1272) +++ trunk/src/main/java/org/ourproject/kune/platf/server/rpc/UserRPC.java 2011-03-13 20:51:48 UTC (rev 1273) @@ -19,7 +19,10 @@ */ package org.ourproject.kune.platf.server.rpc; +import javax.servlet.http.HttpSession; + import org.jivesoftware.smack.util.Base64; +import org.json.JSONObject; import org.ourproject.kune.platf.server.UserSession; import org.ourproject.kune.platf.server.auth.ActionLevel; import org.ourproject.kune.platf.server.auth.Authenticated; @@ -30,6 +33,8 @@ import org.ourproject.kune.platf.server.mapper.Mapper; import org.ourproject.kune.platf.server.users.UserInfo; import org.ourproject.kune.platf.server.users.UserInfoService; +import org.waveprotocol.box.server.CoreSettings; +import org.waveprotocol.box.server.authentication.SessionManager; import cc.kune.core.client.errors.AccessViolationException; import cc.kune.core.client.errors.DefaultException; @@ -40,12 +45,15 @@ import cc.kune.core.shared.domain.utils.StateToken; import cc.kune.core.shared.dto.UserDTO; import cc.kune.core.shared.dto.UserInfoDTO; +import cc.kune.core.shared.dto.WaveClientParams; import cc.kune.domain.Group; import cc.kune.domain.User; +import cc.kune.wave.server.CustomWaveClientServlet; import com.google.inject.Inject; import com.google.inject.Provider; import com.google.inject.Singleton; +import com.google.inject.name.Named; import com.google.inject.persist.Transactional; @Singleton @@ -57,18 +65,26 @@ private final UserInfoService userInfoService; private final UserManager userManager; private final Provider<UserSession> userSessionProvider; + private final Boolean useSocketIO; + private final CustomWaveClientServlet waveClientServlet; + private final SessionManager waveSessionManager; @Inject public UserRPC(final Provider<SessionService> sessionServiceProvider, final Provider<UserSession> userSessionProvider, final UserManager userManager, - final GroupManager groupManager, final UserInfoService userInfoService, final Mapper mapper) { + @Named(CoreSettings.USE_SOCKETIO) final Boolean useSocketIO, final GroupManager groupManager, + final UserInfoService userInfoService, final Mapper mapper, final SessionManager waveSessionManager, + final CustomWaveClientServlet waveClientServlet) { this.sessionServiceProvider = sessionServiceProvider; this.userSessionProvider = userSessionProvider; this.userManager = userManager; + this.useSocketIO = useSocketIO; this.groupManager = groupManager; this.userInfoService = userInfoService; this.mapper = mapper; + this.waveSessionManager = waveSessionManager; + this.waveClientServlet = waveClientServlet; } @Override @@ -102,6 +118,15 @@ return userSessionProvider.get(); } + @Override + @Authenticated(mandatory = true) + public WaveClientParams getWaveClientParameters(final String userHash) { + final HttpSession sessionFromToken = waveSessionManager.getSessionFromToken(userHash); + final JSONObject sessionJson = waveClientServlet.getSessionJson(sessionFromToken); + final JSONObject clientFlags = new JSONObject(); // waveClientServlet.getClientFlags(); + return new WaveClientParams(sessionJson.toString(), clientFlags.toString(), useSocketIO); + } + private UserInfoDTO loadUserInfo(final User user) throws DefaultException { final UserInfo userInfo = userInfoService.buildInfo(user, getUserSession().getHash()); return mapper.map(userInfo, UserInfoDTO.class); @@ -125,7 +150,7 @@ } else { throw new UserAuthException(); } - } + }; @Override @Authenticated @@ -135,7 +160,7 @@ // FIXME final SessionService sessionService = // sessionServiceProvider.get(); // FIXME sessionService.getNewSession(); - }; + } @Override @Authenticated(mandatory = false) @@ -166,5 +191,4 @@ } user.setSNetVisibility(visibility); } - }
participants (1)
-
Vicente J. Ruiz Jurado