http://git-wip-us.apache.org/repos/asf/incubator-wave/blob/80369760/src/org/waveprotocol/box/server/rpc/ServerRpcProvider.java ---------------------------------------------------------------------- diff --git a/src/org/waveprotocol/box/server/rpc/ServerRpcProvider.java b/src/org/waveprotocol/box/server/rpc/ServerRpcProvider.java index deaf01b..9beb2b5 100755 --- a/src/org/waveprotocol/box/server/rpc/ServerRpcProvider.java +++ b/src/org/waveprotocol/box/server/rpc/ServerRpcProvider.java @@ -26,7 +26,6 @@ import com.google.common.collect.Sets; import com.google.inject.Inject; import com.google.inject.Injector; import com.google.inject.Singleton; -import com.google.inject.name.Named; import com.google.inject.servlet.GuiceFilter; import com.google.inject.servlet.GuiceServletContextListener; import com.google.inject.servlet.ServletModule; @@ -35,60 +34,38 @@ import com.google.protobuf.Descriptors.MethodDescriptor; import com.google.protobuf.Message; import com.google.protobuf.RpcCallback; import com.google.protobuf.Service; - +import com.typesafe.config.Config; import org.apache.commons.lang.StringUtils; import org.atmosphere.cache.UUIDBroadcasterCache; import org.atmosphere.config.service.AtmosphereHandlerService; -import org.atmosphere.cpr.AtmosphereHandler; -import org.atmosphere.cpr.AtmosphereResource; -import org.atmosphere.cpr.AtmosphereResourceEvent; -import org.atmosphere.cpr.AtmosphereResourceSession; -import org.atmosphere.cpr.AtmosphereResourceSessionFactory; -import org.atmosphere.cpr.AtmosphereResponse; +import org.atmosphere.cpr.*; import org.atmosphere.guice.AtmosphereGuiceServlet; import org.atmosphere.util.IOUtils; import org.eclipse.jetty.server.Connector; import org.eclipse.jetty.server.Server; import org.eclipse.jetty.server.ServerConnector; +import org.eclipse.jetty.server.nio.SelectChannelConnector; import org.eclipse.jetty.server.session.HashSessionManager; import org.eclipse.jetty.servlet.DefaultServlet; import org.eclipse.jetty.servlet.ServletHolder; -import org.eclipse.jetty.server.nio.SelectChannelConnector; import org.eclipse.jetty.servlets.GzipFilter; import org.eclipse.jetty.util.resource.ResourceCollection; import org.eclipse.jetty.util.ssl.SslContextFactory; import org.eclipse.jetty.webapp.WebAppContext; -import org.eclipse.jetty.websocket.servlet.ServletUpgradeRequest; -import org.eclipse.jetty.websocket.servlet.ServletUpgradeResponse; -import org.eclipse.jetty.websocket.servlet.WebSocketCreator; -import org.eclipse.jetty.websocket.servlet.WebSocketServlet; -import org.eclipse.jetty.websocket.servlet.WebSocketServletFactory; +import org.eclipse.jetty.websocket.servlet.*; import org.waveprotocol.box.common.comms.WaveClientRpc.ProtocolAuthenticate; import org.waveprotocol.box.common.comms.WaveClientRpc.ProtocolAuthenticationResult; -import org.waveprotocol.box.server.CoreSettings; import org.waveprotocol.box.server.authentication.SessionManager; +import org.waveprotocol.box.server.executor.ExecutorAnnotations.ClientServerExecutor; import org.waveprotocol.box.server.persistence.file.FileUtils; import org.waveprotocol.box.server.rpc.atmosphere.AtmosphereChannel; import org.waveprotocol.box.server.rpc.atmosphere.AtmosphereClientInterceptor; -import org.waveprotocol.box.server.executor.ExecutorAnnotations.ClientServerExecutor; import org.waveprotocol.box.server.util.NetUtils; +import org.waveprotocol.box.stat.Timer; +import org.waveprotocol.box.stat.Timing; import org.waveprotocol.wave.model.util.Pair; import org.waveprotocol.wave.model.wave.ParticipantId; import org.waveprotocol.wave.util.logging.Log; -import org.waveprotocol.box.stat.Timer; -import org.waveprotocol.box.stat.Timing; - -import java.io.IOException; -import java.net.InetSocketAddress; -import java.net.SocketAddress; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.EnumSet; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.Executor; import javax.annotation.Nullable; import javax.servlet.DispatcherType; @@ -96,6 +73,12 @@ import javax.servlet.Filter; import javax.servlet.ServletContextListener; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpSession; +import java.io.IOException; +import java.net.InetSocketAddress; +import java.net.SocketAddress; +import java.util.*; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.Executor; /** * ServerRpcProvider can provide instances of type Service over an incoming @@ -177,7 +160,7 @@ public class ServerRpcProvider { @Override protected void sendMessage(int sequenceNo, Message message) { - atmosphereChannel.sendMessage(sequenceNo, message);; + atmosphereChannel.sendMessage(sequenceNo, message); } public AtmosphereChannel getAtmosphereChannel() { @@ -191,7 +174,7 @@ public class ServerRpcProvider { static abstract class Connection implements ProtoCallback { private final Map<Integer, ServerRpcController> activeRpcs = - new ConcurrentHashMap<Integer, ServerRpcController>(); + new ConcurrentHashMap<>(); // The logged in user. // Note: Due to this bug: @@ -204,7 +187,7 @@ public class ServerRpcProvider { /** * @param loggedInUser The currently logged in user, or null if no user is * logged in. - * @param provider + * @param provider the provider */ public Connection(ParticipantId loggedInUser, ServerRpcProvider provider) { this.loggedInUser = loggedInUser; @@ -225,8 +208,7 @@ public class ServerRpcProvider { private ParticipantId authenticate(String token) { HttpSession session = provider.sessionManager.getSessionFromToken(token); - ParticipantId user = provider.sessionManager.getLoggedInUser(session); - return user; + return provider.sessionManager.getLoggedInUser(session); } @Override @@ -278,8 +260,7 @@ public class ServerRpcProvider { if (message instanceof Rpc.RpcFinished || !serviceMethod.method.getOptions().getExtension(Rpc.isStreamingRpc)) { // This RPC is over - remove it from the map. - boolean failed = message instanceof Rpc.RpcFinished - ? ((Rpc.RpcFinished) message).getFailed() : false; + boolean failed = message instanceof Rpc.RpcFinished && ((Rpc.RpcFinished) message).getFailed(); LOG.fine("RPC " + sequenceNo + " is now finished, failed = " + failed); if (failed) { LOG.info("error = " + ((Rpc.RpcFinished) message).getErrorText()); @@ -340,18 +321,19 @@ public class ServerRpcProvider { } @Inject - public ServerRpcProvider(@Named(CoreSettings.HTTP_FRONTEND_ADDRESSES) List<String> httpAddresses, - @Named(CoreSettings.HTTP_WEBSOCKET_PUBLIC_ADDRESS) String websocketAddress, - @Named(CoreSettings.RESOURCE_BASES) List<String> resourceBases, - SessionManager sessionManager, org.eclipse.jetty.server.SessionManager jettySessionManager, - @Named(CoreSettings.SESSIONS_STORE_DIRECTORY) String sessionStoreDir, - @Named(CoreSettings.ENABLE_SSL) boolean sslEnabled, - @Named(CoreSettings.SSL_KEYSTORE_PATH) String sslKeystorePath, - @Named(CoreSettings.SSL_KEYSTORE_PASSWORD) String sslKeystorePassword, - @ClientServerExecutor Executor executorService) { - this(parseAddressList(httpAddresses, websocketAddress), resourceBases - .toArray(new String[0]), sessionManager, jettySessionManager, sessionStoreDir, - sslEnabled, sslKeystorePath, sslKeystorePassword, executorService); + public ServerRpcProvider(Config config, + SessionManager sessionManager, org.eclipse.jetty.server.SessionManager jettySessionManager, + @ClientServerExecutor Executor executorService) { + this(parseAddressList(config.getStringList("core.http_frontend_addresses"), + config.getString("core.http_websocket_public_address")), + config.getStringList("core.resource_bases").toArray(new String[0]), + sessionManager, + jettySessionManager, + config.getString("core.sessions_store_directory"), + config.getBoolean("security.enable_ssl"), + config.getString("security.ssl_keystore_path"), + config.getString("security.ssl_keystore_password"), + executorService); } public void startWebSocketServer(final Injector injector) { @@ -382,13 +364,12 @@ public class ServerRpcProvider { addWebSocketServlets(); try { - final Injector parentInjector = injector; - final ServletModule servletModule = getServletModule(parentInjector); + final ServletModule servletModule = getServletModule(); ServletContextListener contextListener = new GuiceServletContextListener() { - private final Injector childInjector = parentInjector.createChildInjector(servletModule); + private final Injector childInjector = injector.createChildInjector(servletModule); @Override protected Injector getInjector() { @@ -444,7 +425,7 @@ public class ServerRpcProvider { addServlet("/webclient/*", DefaultServlet.class); } - public ServletModule getServletModule(final Injector injector) { + public ServletModule getServletModule() { return new ServletModule() { @Override @@ -474,7 +455,7 @@ public class ServerRpcProvider { } else { Set<InetSocketAddress> addresses = Sets.newHashSet(); // We add the websocketAddress as another listening address. - ArrayList<String> mergedAddressList = new ArrayList<String>(addressList); + ArrayList<String> mergedAddressList = new ArrayList<>(addressList); if (!StringUtils.isEmpty(websocketAddress)) { mergedAddressList.add(websocketAddress); } @@ -496,7 +477,7 @@ public class ServerRpcProvider { } } } - return addresses.toArray(new InetSocketAddress[0]); + return addresses.toArray(new InetSocketAddress[addresses.size()]); } } @@ -555,13 +536,11 @@ public class ServerRpcProvider { final int websocketMaxMessageSize; @Inject - public WaveWebSocketServlet(ServerRpcProvider provider, - @Named(CoreSettings.WEBSOCKET_MAX_IDLE_TIME) int websocketMaxIdleTime, - @Named(CoreSettings.WEBSOCKET_MAX_MESSAGE_SIZE) int websocketMaxMessageSize) { + public WaveWebSocketServlet(ServerRpcProvider provider, Config config) { super(); this.provider = provider; - this.websocketMaxIdleTime= websocketMaxIdleTime; - this.websocketMaxMessageSize = websocketMaxMessageSize; + this.websocketMaxIdleTime = config.getInt("network.websocket_max_idle_time"); + this.websocketMaxMessageSize = config.getInt("network.websocket_max_message_size"); } @SuppressWarnings("cast") @@ -669,7 +648,7 @@ public class ServerRpcProvider { LOG.fine("SEND MESSAGE ARRAY " + event.getMessage().toString()); - List<Object> list = Arrays.asList(event.getMessage()); + List<Object> list = Collections.singletonList(event.getMessage()); response.getOutputStream().write(MSG_SEPARATOR.getBytes(MSG_CHARSET)); for (Object object : list) { @@ -819,7 +798,7 @@ public class ServerRpcProvider { if (initParams != null) { servletHolder.setInitParameters(initParams); } - servletRegistry.add(new Pair<String, ServletHolder>(urlPattern, servletHolder)); + servletRegistry.add(Pair.of(urlPattern, servletHolder)); return servletHolder; }
http://git-wip-us.apache.org/repos/asf/incubator-wave/blob/80369760/src/org/waveprotocol/box/server/rpc/UserRegistrationServlet.java ---------------------------------------------------------------------- diff --git a/src/org/waveprotocol/box/server/rpc/UserRegistrationServlet.java b/src/org/waveprotocol/box/server/rpc/UserRegistrationServlet.java index 0b858a9..d973812 100644 --- a/src/org/waveprotocol/box/server/rpc/UserRegistrationServlet.java +++ b/src/org/waveprotocol/box/server/rpc/UserRegistrationServlet.java @@ -22,8 +22,8 @@ package org.waveprotocol.box.server.rpc; import com.google.gxp.base.GxpContext; import com.google.inject.Inject; import com.google.inject.name.Named; - -import org.waveprotocol.box.server.CoreSettings; +import com.typesafe.config.Config; +import org.waveprotocol.box.server.CoreSettingsNames; import org.waveprotocol.box.server.authentication.HttpRequestBasedCallbackHandler; import org.waveprotocol.box.server.authentication.PasswordDigest; import org.waveprotocol.box.server.gxp.UserRegistrationPage; @@ -33,13 +33,12 @@ import org.waveprotocol.box.server.util.RegistrationUtil; import org.waveprotocol.wave.model.wave.InvalidParticipantAddress; import org.waveprotocol.wave.model.wave.ParticipantId; -import java.io.IOException; -import java.util.Locale; - import javax.inject.Singleton; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.util.Locale; /** * The user registration servlet allows new users to register accounts. @@ -57,15 +56,17 @@ public final class UserRegistrationServlet extends HttpServlet { private final String analyticsAccount; @Inject - public UserRegistrationServlet(AccountStore accountStore, - @Named(CoreSettings.WAVE_SERVER_DOMAIN) String domain, WelcomeRobot welcomeBot, - @Named(CoreSettings.DISABLE_REGISTRATION) boolean registrationDisabled, - @Named(CoreSettings.ANALYTICS_ACCOUNT) String analyticsAccount) { + public UserRegistrationServlet( + AccountStore accountStore, + @Named(CoreSettingsNames.WAVE_SERVER_DOMAIN) String domain, + Config config, + WelcomeRobot welcomeBot) { + this.accountStore = accountStore; this.domain = domain; this.welcomeBot = welcomeBot; - this.registrationDisabled = registrationDisabled; - this.analyticsAccount = analyticsAccount; + this.registrationDisabled = config.getBoolean("administration.disable_registration"); + this.analyticsAccount = config.getString("administration.analytics_account"); } @Override @@ -101,7 +102,7 @@ public final class UserRegistrationServlet extends HttpServlet { * returns a string containing an error message. On success, returns null. */ private String tryCreateUser(String username, String password) { - ParticipantId id = null; + ParticipantId id; try { id = RegistrationUtil.checkNewUsername(domain, username); } catch (InvalidParticipantAddress exception) { @@ -119,7 +120,7 @@ public final class UserRegistrationServlet extends HttpServlet { if (!RegistrationUtil.createAccountIfMissing(accountStore, id, new PasswordDigest(password.toCharArray()), welcomeBot)) { - return "An unexpected error occured while trying to create the account"; + return "An unexpected error occurred while trying to create the account"; } return null; http://git-wip-us.apache.org/repos/asf/incubator-wave/blob/80369760/src/org/waveprotocol/box/server/rpc/WaveClientServlet.java ---------------------------------------------------------------------- diff --git a/src/org/waveprotocol/box/server/rpc/WaveClientServlet.java b/src/org/waveprotocol/box/server/rpc/WaveClientServlet.java index 37bb8de..00f635a 100644 --- a/src/org/waveprotocol/box/server/rpc/WaveClientServlet.java +++ b/src/org/waveprotocol/box/server/rpc/WaveClientServlet.java @@ -23,35 +23,33 @@ import com.google.common.collect.Maps; import com.google.gxp.base.GxpContext; import com.google.inject.Inject; import com.google.inject.name.Named; - +import com.typesafe.config.Config; import org.apache.commons.lang.StringUtils; +import org.json.JSONException; +import org.json.JSONObject; import org.waveprotocol.box.common.SessionConstants; -import org.waveprotocol.box.server.CoreSettings; +import org.waveprotocol.box.server.CoreSettingsNames; +import org.waveprotocol.box.server.account.AccountData; 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.util.RandomBase64Generator; -import org.waveprotocol.box.server.account.AccountData; import org.waveprotocol.box.server.util.UrlParameters; import org.waveprotocol.wave.client.util.ClientFlagsBase; import org.waveprotocol.wave.common.bootstrap.FlagConstants; import org.waveprotocol.wave.model.wave.ParticipantId; import org.waveprotocol.wave.util.logging.Log; -import org.json.JSONException; -import org.json.JSONObject; - -import java.io.IOException; -import java.lang.reflect.Method; -import java.util.Enumeration; -import java.util.HashMap; -import java.util.List; - import javax.inject.Singleton; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; +import java.io.IOException; +import java.lang.reflect.Method; +import java.util.Enumeration; +import java.util.HashMap; +import java.util.List; /** * The HTTP servlet for serving a wave client along with content generated on @@ -76,7 +74,6 @@ public class WaveClientServlet extends HttpServlet { private final String domain; private final String analyticsAccount; private final SessionManager sessionManager; - private final String websocketAddress; private final String websocketPresentedAddress; /** @@ -84,18 +81,17 @@ public class WaveClientServlet extends HttpServlet { */ @Inject public WaveClientServlet( - @Named(CoreSettings.WAVE_SERVER_DOMAIN) String domain, - @Named(CoreSettings.HTTP_FRONTEND_ADDRESSES) List<String> httpAddresses, - @Named(CoreSettings.HTTP_WEBSOCKET_PUBLIC_ADDRESS) String websocketAddress, - @Named(CoreSettings.HTTP_WEBSOCKET_PRESENTED_ADDRESS) String websocketPresentedAddress, - @Named(CoreSettings.ANALYTICS_ACCOUNT) String analyticsAccount, + @Named(CoreSettingsNames.WAVE_SERVER_DOMAIN) String domain, + Config config, SessionManager sessionManager) { + List<String> httpAddresses = config.getStringList("core.http_frontend_addresses"); + String websocketAddress = config.getString("core.http_websocket_public_address"); + String websocketPresentedAddress = config.getString("core.http_websocket_presented_address"); this.domain = domain; - this.websocketAddress = StringUtils.isEmpty(websocketAddress) ? - httpAddresses.get(0) : websocketAddress; + String websocketAddress1 = StringUtils.isEmpty(websocketAddress) ? httpAddresses.get(0) : websocketAddress; this.websocketPresentedAddress = StringUtils.isEmpty(websocketPresentedAddress) ? - this.websocketAddress : websocketPresentedAddress; - this.analyticsAccount = analyticsAccount; + websocketAddress1 : websocketPresentedAddress; + this.analyticsAccount = config.getString("administration.analytics_account"); this.sessionManager = sessionManager; } @@ -174,10 +170,9 @@ public class WaveClientServlet extends HttpServlet { } // Ignore the flag on any exception - } catch (SecurityException ex) { + } catch (SecurityException | NumberFormatException ignored) { } catch (NoSuchMethodException ex) { LOG.warning("Failed to find the flag [" + name + "] in ClientFlagsBase."); - } catch (NumberFormatException ex) { } } } http://git-wip-us.apache.org/repos/asf/incubator-wave/blob/80369760/src/org/waveprotocol/box/server/waveserver/CertificateManagerImpl.java ---------------------------------------------------------------------- diff --git a/src/org/waveprotocol/box/server/waveserver/CertificateManagerImpl.java b/src/org/waveprotocol/box/server/waveserver/CertificateManagerImpl.java index 75569bc..911576c 100644 --- a/src/org/waveprotocol/box/server/waveserver/CertificateManagerImpl.java +++ b/src/org/waveprotocol/box/server/waveserver/CertificateManagerImpl.java @@ -20,33 +20,21 @@ package org.waveprotocol.box.server.waveserver; import com.google.common.base.Preconditions; -import com.google.common.collect.ArrayListMultimap; -import com.google.common.collect.ImmutableList; -import com.google.common.collect.ImmutableSet; -import com.google.common.collect.Iterables; -import com.google.common.collect.Lists; -import com.google.common.collect.Maps; -import com.google.common.collect.Multimap; +import com.google.common.collect.*; import com.google.inject.Inject; -import com.google.inject.name.Named; import com.google.protobuf.ByteString; import com.google.protobuf.InvalidProtocolBufferException; - +import com.typesafe.config.Config; import org.apache.commons.codec.binary.Hex; -import org.waveprotocol.box.server.CoreSettings; import org.waveprotocol.box.server.common.CoreWaveletOperationSerializer; -import org.waveprotocol.wave.crypto.CertPathStore; -import org.waveprotocol.wave.crypto.SignatureException; -import org.waveprotocol.wave.crypto.SignerInfo; -import org.waveprotocol.wave.crypto.UnknownSignerException; -import org.waveprotocol.wave.crypto.WaveSignatureVerifier; -import org.waveprotocol.wave.federation.FederationErrors; -import org.waveprotocol.wave.federation.WaveletFederationProvider; +import org.waveprotocol.wave.crypto.*; import org.waveprotocol.wave.federation.FederationErrorProto.FederationError; +import org.waveprotocol.wave.federation.FederationErrors; import org.waveprotocol.wave.federation.Proto.ProtocolSignature; import org.waveprotocol.wave.federation.Proto.ProtocolSignedDelta; import org.waveprotocol.wave.federation.Proto.ProtocolSignerInfo; import org.waveprotocol.wave.federation.Proto.ProtocolWaveletDelta; +import org.waveprotocol.wave.federation.WaveletFederationProvider; import org.waveprotocol.wave.federation.WaveletFederationProvider.DeltaSignerInfoResponseListener; import org.waveprotocol.wave.model.id.WaveletName; import org.waveprotocol.wave.model.version.HashedVersion; @@ -79,10 +67,9 @@ public class CertificateManagerImpl implements CertificateManager { signerInfoRequests; @Inject - public CertificateManagerImpl( - @Named(CoreSettings.WAVESERVER_DISABLE_VERIFICATION) boolean disableVerfication, - SignatureHandler signer, WaveSignatureVerifier verifier, CertPathStore certPathStore) { - this.disableVerfication = disableVerfication; + public CertificateManagerImpl(Config config, SignatureHandler signer, + WaveSignatureVerifier verifier, CertPathStore certPathStore) { + this.disableVerfication = config.getBoolean("federation.waveserver_disable_verification"); this.waveSigner = signer; // for now, we just support a single signer this.localDomains = ImmutableSet.of(signer.getDomain()); @@ -92,7 +79,7 @@ public class CertificateManagerImpl implements CertificateManager { if (disableVerfication) { LOG.warning("** SIGNATURE VERIFICATION DISABLED ** " - + "see flag \"" + CoreSettings.WAVESERVER_DISABLE_VERIFICATION + "\""); + + "see configuration federation.waveserver_disable_verification"); } } http://git-wip-us.apache.org/repos/asf/incubator-wave/blob/80369760/src/org/waveprotocol/box/server/waveserver/LucenePerUserWaveViewHandlerImpl.java ---------------------------------------------------------------------- diff --git a/src/org/waveprotocol/box/server/waveserver/LucenePerUserWaveViewHandlerImpl.java b/src/org/waveprotocol/box/server/waveserver/LucenePerUserWaveViewHandlerImpl.java index 02aa58b..dc114cd 100644 --- a/src/org/waveprotocol/box/server/waveserver/LucenePerUserWaveViewHandlerImpl.java +++ b/src/org/waveprotocol/box/server/waveserver/LucenePerUserWaveViewHandlerImpl.java @@ -19,11 +19,6 @@ package org.waveprotocol.box.server.waveserver; -import static org.waveprotocol.box.server.waveserver.IndexFieldType.LMT; -import static org.waveprotocol.box.server.waveserver.IndexFieldType.WAVEID; -import static org.waveprotocol.box.server.waveserver.IndexFieldType.WAVELETID; -import static org.waveprotocol.box.server.waveserver.IndexFieldType.WITH; - import com.google.common.base.Preconditions; import com.google.common.collect.HashMultimap; import com.google.common.collect.Multimap; @@ -32,31 +27,19 @@ import com.google.common.util.concurrent.ListenableFutureTask; import com.google.inject.Inject; import com.google.inject.Singleton; import com.google.inject.name.Named; - import org.apache.lucene.analysis.standard.StandardAnalyzer; import org.apache.lucene.document.Document; import org.apache.lucene.document.Field; -import org.apache.lucene.index.CorruptIndexException; import org.apache.lucene.index.IndexWriter; import org.apache.lucene.index.IndexWriterConfig; import org.apache.lucene.index.IndexWriterConfig.OpenMode; import org.apache.lucene.index.Term; -import org.apache.lucene.search.BooleanClause; +import org.apache.lucene.search.*; import org.apache.lucene.search.BooleanClause.Occur; -import org.apache.lucene.search.BooleanQuery; -import org.apache.lucene.search.IndexSearcher; -import org.apache.lucene.search.NRTManager; -import org.apache.lucene.search.NRTManagerReopenThread; -import org.apache.lucene.search.ScoreDoc; -import org.apache.lucene.search.SearcherManager; -import org.apache.lucene.search.SearcherWarmer; -import org.apache.lucene.search.Sort; -import org.apache.lucene.search.SortField; -import org.apache.lucene.search.TermQuery; -import org.apache.lucene.search.TopDocs; import org.apache.lucene.store.AlreadyClosedException; import org.apache.lucene.util.Version; -import org.waveprotocol.box.server.CoreSettings; +import org.waveprotocol.box.server.CoreSettingsNames; +import org.waveprotocol.box.server.executor.ExecutorAnnotations.IndexExecutor; import org.waveprotocol.box.server.persistence.lucene.IndexDirectory; import org.waveprotocol.wave.model.id.WaveId; import org.waveprotocol.wave.model.id.WaveletId; @@ -69,11 +52,10 @@ import java.io.Closeable; import java.io.IOException; import java.util.concurrent.Callable; import java.util.concurrent.Executor; -import java.util.concurrent.ScheduledExecutorService; import java.util.logging.Level; import java.util.logging.Logger; -import org.waveprotocol.box.server.executor.ExecutorAnnotations.IndexExecutor; +import static org.waveprotocol.box.server.waveserver.IndexFieldType.*; /** * Lucene based implementation of {@link PerUserWaveViewHandler}. @@ -122,7 +104,6 @@ public class LucenePerUserWaveViewHandlerImpl implements PerUserWaveViewHandler, private static final int MAX_WAVES = 10000; private final StandardAnalyzer analyzer; - private final TextCollator textCollator; private final IndexWriter indexWriter; private final NRTManager nrtManager; private final NRTManagerReopenThread nrtManagerReopenThread; @@ -132,18 +113,17 @@ public class LucenePerUserWaveViewHandlerImpl implements PerUserWaveViewHandler, @Inject public LucenePerUserWaveViewHandlerImpl(IndexDirectory directory, - ReadableWaveletDataProvider waveletProvider, TextCollator textCollator, - @Named(CoreSettings.WAVE_SERVER_DOMAIN) final String waveDomain, - @IndexExecutor Executor executor) { - this.textCollator = textCollator; + ReadableWaveletDataProvider waveletProvider, + @Named(CoreSettingsNames.WAVE_SERVER_DOMAIN) String domain, + @IndexExecutor Executor executor) { this.waveletProvider = waveletProvider; this.executor = executor; analyzer = new StandardAnalyzer(LUCENE_VERSION); try { - IndexWriterConfig config = new IndexWriterConfig(LUCENE_VERSION, analyzer); - config.setOpenMode(OpenMode.CREATE_OR_APPEND); - indexWriter = new IndexWriter(directory.getDirectory(), config); - nrtManager = new NRTManager(indexWriter, new WaveSearchWarmer(waveDomain)); + IndexWriterConfig indexConfig = new IndexWriterConfig(LUCENE_VERSION, analyzer); + indexConfig.setOpenMode(OpenMode.CREATE_OR_APPEND); + indexWriter = new IndexWriter(directory.getDirectory(), indexConfig); + nrtManager = new NRTManager(indexWriter, new WaveSearchWarmer(domain)); } catch (IOException ex) { throw new IndexException(ex); } @@ -191,7 +171,7 @@ public class LucenePerUserWaveViewHandlerImpl implements PerUserWaveViewHandler, Preconditions.checkNotNull(waveletName); Preconditions.checkNotNull(participant); - ListenableFutureTask<Void> task = ListenableFutureTask.<Void>create(new Callable<Void>() { + ListenableFutureTask<Void> task = ListenableFutureTask.create(new Callable<Void>() { @Override public Void call() throws Exception { @@ -216,7 +196,7 @@ public class LucenePerUserWaveViewHandlerImpl implements PerUserWaveViewHandler, Preconditions.checkNotNull(waveletName); Preconditions.checkNotNull(participant); - ListenableFutureTask<Void> task = ListenableFutureTask.<Void>create(new Callable<Void>() { + ListenableFutureTask<Void> task = ListenableFutureTask.create(new Callable<Void>() { @Override public Void call() throws Exception { @@ -225,9 +205,6 @@ public class LucenePerUserWaveViewHandlerImpl implements PerUserWaveViewHandler, waveletData = waveletProvider.getReadableWaveletData(waveletName); try { removeParticipantfromIndex(waveletData, participant, nrtManager); - } catch (CorruptIndexException e) { - LOG.log(Level.SEVERE, "Failed to update index for " + waveletName, e); - throw e; } catch (IOException e) { LOG.log(Level.SEVERE, "Failed to update index for " + waveletName, e); throw e; @@ -247,7 +224,7 @@ public class LucenePerUserWaveViewHandlerImpl implements PerUserWaveViewHandler, public ListenableFuture<Void> onWaveInit(final WaveletName waveletName) { Preconditions.checkNotNull(waveletName); - ListenableFutureTask<Void> task = ListenableFutureTask.<Void>create(new Callable<Void>() { + ListenableFutureTask<Void> task = ListenableFutureTask.create(new Callable<Void>() { @Override public Void call() throws Exception { @@ -271,24 +248,21 @@ public class LucenePerUserWaveViewHandlerImpl implements PerUserWaveViewHandler, try { // TODO (Yuri Z): Update documents instead of totally removing and adding. removeIndex(wavelet, nrtManager); - addIndex(wavelet, indexWriter, nrtManager, textCollator); + addIndex(wavelet, nrtManager); indexWriter.commit(); - } catch (CorruptIndexException e) { - throw new IndexException(String.valueOf(wavelet.getWaveletId()), e); } catch (IOException e) { throw new IndexException(String.valueOf(wavelet.getWaveletId()), e); } } - private static void addIndex(ReadableWaveletData wavelet, IndexWriter indexWriter, - NRTManager nrtManager, TextCollator textCollator) throws CorruptIndexException, IOException { + private static void addIndex(ReadableWaveletData wavelet, + NRTManager nrtManager) throws IOException { Document doc = new Document(); - addWaveletFieldsToIndex(wavelet, textCollator, doc); + addWaveletFieldsToIndex(wavelet, doc); nrtManager.addDocument(doc); } - private static void addWaveletFieldsToIndex(ReadableWaveletData wavelet, - TextCollator textCollator, Document doc) { + private static void addWaveletFieldsToIndex(ReadableWaveletData wavelet, Document doc) { doc.add(new Field(WAVEID.toString(), wavelet.getWaveId().serialise(), Field.Store.YES, Field.Index.NOT_ANALYZED)); doc.add(new Field(WAVELETID.toString(), wavelet.getWaveletId().serialise(), Field.Store.YES, @@ -302,7 +276,7 @@ public class LucenePerUserWaveViewHandlerImpl implements PerUserWaveViewHandler, } private static void removeIndex(ReadableWaveletData wavelet, NRTManager nrtManager) - throws CorruptIndexException, IOException { + throws IOException { BooleanQuery query = new BooleanQuery(); query.add(new TermQuery(new Term(WAVEID.toString(), wavelet.getWaveId().serialise())), BooleanClause.Occur.MUST); @@ -312,7 +286,7 @@ public class LucenePerUserWaveViewHandlerImpl implements PerUserWaveViewHandler, } private static void removeParticipantfromIndex(ReadableWaveletData wavelet, - ParticipantId participant, NRTManager nrtManager) throws CorruptIndexException, IOException { + ParticipantId participant, NRTManager nrtManager) throws IOException { BooleanQuery query = new BooleanQuery(); Term waveIdTerm = new Term(WAVEID.toString(), wavelet.getWaveId().serialise()); query.add(new TermQuery(waveIdTerm), BooleanClause.Occur.MUST); @@ -343,7 +317,6 @@ public class LucenePerUserWaveViewHandlerImpl implements PerUserWaveViewHandler, } catch (IOException e) { LOG.log(Level.WARNING, "Failed to close searcher. ", e); } - indexSearcher = null; } } @@ -373,7 +346,6 @@ public class LucenePerUserWaveViewHandlerImpl implements PerUserWaveViewHandler, } catch (IOException e) { LOG.log(Level.WARNING, "Failed to close searcher. " + user, e); } - indexSearcher = null; } return userWavesViewMap; } http://git-wip-us.apache.org/repos/asf/incubator-wave/blob/80369760/src/org/waveprotocol/box/server/waveserver/NonSigningSignatureHandler.java ---------------------------------------------------------------------- diff --git a/src/org/waveprotocol/box/server/waveserver/NonSigningSignatureHandler.java b/src/org/waveprotocol/box/server/waveserver/NonSigningSignatureHandler.java index e87b6bf..8ad816e 100644 --- a/src/org/waveprotocol/box/server/waveserver/NonSigningSignatureHandler.java +++ b/src/org/waveprotocol/box/server/waveserver/NonSigningSignatureHandler.java @@ -24,7 +24,7 @@ import com.google.inject.Provider; import com.google.inject.Singleton; import com.google.inject.name.Named; -import org.waveprotocol.box.server.CoreSettings; +import org.waveprotocol.box.server.CoreSettingsNames; import org.waveprotocol.wave.crypto.SignerInfo; import org.waveprotocol.wave.federation.Proto.ProtocolSignature; import org.waveprotocol.wave.federation.Proto.ProtocolWaveletDelta; @@ -45,7 +45,7 @@ public class NonSigningSignatureHandler implements SignatureHandler { @Inject public NonSigningSignatureHandlerProvider( - @Named(CoreSettings.WAVE_SERVER_DOMAIN) String waveDomain) { + @Named(CoreSettingsNames.WAVE_SERVER_DOMAIN) String waveDomain) { this.waveDomain = waveDomain; } http://git-wip-us.apache.org/repos/asf/incubator-wave/blob/80369760/src/org/waveprotocol/box/server/waveserver/SigningSignatureHandler.java ---------------------------------------------------------------------- diff --git a/src/org/waveprotocol/box/server/waveserver/SigningSignatureHandler.java b/src/org/waveprotocol/box/server/waveserver/SigningSignatureHandler.java index 7133808..f9e6cbf 100644 --- a/src/org/waveprotocol/box/server/waveserver/SigningSignatureHandler.java +++ b/src/org/waveprotocol/box/server/waveserver/SigningSignatureHandler.java @@ -26,13 +26,11 @@ import com.google.inject.Inject; import com.google.inject.Provider; import com.google.inject.ProvisionException; import com.google.inject.Singleton; -import com.google.inject.name.Named; - +import com.typesafe.config.Config; import org.waveprotocol.wave.crypto.SignatureException; import org.waveprotocol.wave.crypto.SignerInfo; import org.waveprotocol.wave.crypto.WaveSigner; import org.waveprotocol.wave.crypto.WaveSignerFactory; -import org.waveprotocol.wave.federation.FederationSettings; import org.waveprotocol.wave.federation.Proto.ProtocolSignature; import org.waveprotocol.wave.federation.Proto.ProtocolWaveletDelta; @@ -58,23 +56,14 @@ public class SigningSignatureHandler implements SignatureHandler { private SigningSignatureHandler signer = null; /** - * Public constructor. - * @param privateKey file name that has the PKCS#8-PEM-encoded private key. - * @param certs list of file names that have the certificates of this signer. - * The first file name must have the signer's target certificate. The - * certificates can be DER or PEM encoded. - * @param certDomain the domain for which the certificate was issued. * @param factory A {@link WaveSignerFactory}. + * @param config the configuration. */ @Inject - public SigningSignatureHandlerProvider( - @Named(FederationSettings.CERTIFICATE_PRIVATE_KEY) String privateKey, - @Named(FederationSettings.CERTIFICATE_FILES) List<String> certs, - @Named(FederationSettings.CERTIFICATE_DOMAIN) String certDomain, - WaveSignerFactory factory) { - this.privateKey = privateKey; - this.certs = certs; - this.certDomain = certDomain; + public SigningSignatureHandlerProvider(WaveSignerFactory factory, Config config) { + this.privateKey = config.getString("federation.certificate_private_key"); + this.certs = config.getStringList("federation.certificate_files"); + this.certDomain = config.getString("federation.certificate_domain"); this.waveSignerFactory = factory; } http://git-wip-us.apache.org/repos/asf/incubator-wave/blob/80369760/src/org/waveprotocol/box/server/waveserver/SimpleSearchProviderImpl.java ---------------------------------------------------------------------- diff --git a/src/org/waveprotocol/box/server/waveserver/SimpleSearchProviderImpl.java b/src/org/waveprotocol/box/server/waveserver/SimpleSearchProviderImpl.java index 9884daf..53f35c9 100644 --- a/src/org/waveprotocol/box/server/waveserver/SimpleSearchProviderImpl.java +++ b/src/org/waveprotocol/box/server/waveserver/SimpleSearchProviderImpl.java @@ -27,7 +27,7 @@ import com.google.inject.Inject; import com.google.inject.name.Named; import com.google.wave.api.SearchResult; -import org.waveprotocol.box.server.CoreSettings; +import org.waveprotocol.box.server.CoreSettingsNames; import org.waveprotocol.box.server.waveserver.QueryHelper.InvalidQueryException; import org.waveprotocol.wave.model.id.WaveId; import org.waveprotocol.wave.model.id.WaveletId; @@ -55,7 +55,7 @@ public class SimpleSearchProviderImpl extends AbstractSearchProviderImpl { private final PerUserWaveViewProvider waveViewProvider; @Inject - public SimpleSearchProviderImpl(@Named(CoreSettings.WAVE_SERVER_DOMAIN) final String waveDomain, + public SimpleSearchProviderImpl(@Named(CoreSettingsNames.WAVE_SERVER_DOMAIN) final String waveDomain, WaveDigester digester, final WaveMap waveMap, PerUserWaveViewProvider userWaveViewProvider) { super(waveDomain, digester, waveMap); this.waveViewProvider = userWaveViewProvider; http://git-wip-us.apache.org/repos/asf/incubator-wave/blob/80369760/src/org/waveprotocol/box/server/waveserver/SolrSearchProviderImpl.java ---------------------------------------------------------------------- diff --git a/src/org/waveprotocol/box/server/waveserver/SolrSearchProviderImpl.java b/src/org/waveprotocol/box/server/waveserver/SolrSearchProviderImpl.java index a46dc93..66ff288 100644 --- a/src/org/waveprotocol/box/server/waveserver/SolrSearchProviderImpl.java +++ b/src/org/waveprotocol/box/server/waveserver/SolrSearchProviderImpl.java @@ -27,16 +27,12 @@ import com.google.gson.JsonElement; import com.google.gson.JsonObject; import com.google.gson.JsonParser; import com.google.inject.Inject; -import com.google.inject.name.Named; import com.google.wave.api.SearchResult; - +import com.typesafe.config.Config; import org.apache.commons.httpclient.HttpClient; -import org.apache.commons.httpclient.HttpException; import org.apache.commons.httpclient.URI; -import org.apache.commons.httpclient.URIException; import org.apache.commons.httpclient.methods.GetMethod; import org.apache.http.HttpStatus; -import org.waveprotocol.box.server.CoreSettings; import org.waveprotocol.box.stat.Timed; import org.waveprotocol.wave.model.id.WaveId; import org.waveprotocol.wave.model.id.WaveletId; @@ -49,7 +45,6 @@ import org.waveprotocol.wave.util.logging.Log; import java.io.IOException; import java.io.InputStreamReader; import java.util.Collection; -import java.util.Iterator; import java.util.LinkedHashMap; import java.util.Map; import java.util.regex.Pattern; @@ -106,11 +101,9 @@ public class SolrSearchProviderImpl extends AbstractSearchProviderImpl { }}; @Inject - public SolrSearchProviderImpl(WaveDigester digester, WaveMap waveMap, - @Named(CoreSettings.WAVE_SERVER_DOMAIN) String waveDomain, - @Named(CoreSettings.SOLR_BASE_URL) String solrUrl) { - super(waveDomain, digester, waveMap); - solrBaseUrl = solrUrl; + public SolrSearchProviderImpl(WaveDigester digester, WaveMap waveMap, Config config) { + super(config.getString("core.wave_server_domain"), digester, waveMap); + solrBaseUrl = config.getString("core.solr_base_url"); } @Timed @@ -199,13 +192,12 @@ public class SolrSearchProviderImpl extends AbstractSearchProviderImpl { private void addSearchResultsToCurrentWaveView( LinkedHashMultimap<WaveId, WaveletId> currentUserWavesView, JsonArray docsJson) { - Iterator<JsonElement> docJsonIterator = docsJson.iterator(); - while (docJsonIterator.hasNext()) { - JsonObject docJson = docJsonIterator.next().getAsJsonObject(); + for (JsonElement aDocsJson : docsJson) { + JsonObject docJson = aDocsJson.getAsJsonObject(); WaveId waveId = WaveId.deserialise(docJson.getAsJsonPrimitive(WAVE_ID).getAsString()); WaveletId waveletId = - WaveletId.deserialise(docJson.getAsJsonPrimitive(WAVELET_ID).getAsString()); + WaveletId.deserialise(docJson.getAsJsonPrimitive(WAVELET_ID).getAsString()); currentUserWavesView.put(waveId, waveletId); } } @@ -213,8 +205,7 @@ public class SolrSearchProviderImpl extends AbstractSearchProviderImpl { private static JsonArray extractDocsJson(InputStreamReader isr) { JsonObject json = new JsonParser().parse(isr).getAsJsonObject(); JsonObject responseJson = json.getAsJsonObject("response"); - JsonArray docsJson = responseJson.getAsJsonArray("docs"); - return docsJson; + return responseJson.getAsJsonArray("docs"); } private String buildCurrentSolrQuery(int start, int rows, String fq) { @@ -223,8 +214,7 @@ public class SolrSearchProviderImpl extends AbstractSearchProviderImpl { } private JsonArray sendSearchRequest(String solrQuery, - Function<InputStreamReader, JsonArray> function) throws URIException, IOException, - HttpException { + Function<InputStreamReader, JsonArray> function) throws IOException { JsonArray docsJson; GetMethod getMethod = new GetMethod(); HttpClient httpClient = new HttpClient(); http://git-wip-us.apache.org/repos/asf/incubator-wave/blob/80369760/src/org/waveprotocol/box/server/waveserver/SolrWaveIndexerImpl.java ---------------------------------------------------------------------- diff --git a/src/org/waveprotocol/box/server/waveserver/SolrWaveIndexerImpl.java b/src/org/waveprotocol/box/server/waveserver/SolrWaveIndexerImpl.java index 5403b5f..2af772a 100644 --- a/src/org/waveprotocol/box/server/waveserver/SolrWaveIndexerImpl.java +++ b/src/org/waveprotocol/box/server/waveserver/SolrWaveIndexerImpl.java @@ -29,8 +29,7 @@ import com.google.gson.JsonObject; import com.google.gson.JsonPrimitive; import com.google.inject.Inject; import com.google.inject.Singleton; -import com.google.inject.name.Named; - +import com.typesafe.config.Config; import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclient.URI; import org.apache.commons.httpclient.methods.GetMethod; @@ -40,7 +39,6 @@ import org.apache.commons.httpclient.methods.StringRequestEntity; import org.apache.http.HttpStatus; import org.waveprotocol.box.common.DeltaSequence; import org.waveprotocol.box.common.Snippets; -import org.waveprotocol.box.server.CoreSettings; import org.waveprotocol.box.server.executor.ExecutorAnnotations.SolrExecutor; import org.waveprotocol.box.server.robots.util.ConversationUtil; import org.waveprotocol.box.stat.Timed; @@ -78,12 +76,11 @@ public class SolrWaveIndexerImpl extends AbstractWaveIndexer implements WaveBus. public SolrWaveIndexerImpl(WaveMap waveMap, WaveletProvider waveletProvider, ReadableWaveletDataProvider waveletDataProvider, ConversationUtil conversationUtil, WaveletNotificationDispatcher notificationDispatcher, - @Named(CoreSettings.SOLR_BASE_URL) String solrUrl, + Config config, @SolrExecutor Executor solrExecutor) { super(waveMap, waveletProvider); - executor = solrExecutor; - solrBaseUrl = solrUrl; + solrBaseUrl = config.getString("core.solr_base_url"); this.waveletDataProvider = waveletDataProvider; notificationDispatcher.subscribe(this); } @@ -258,7 +255,7 @@ public class SolrWaveIndexerImpl extends AbstractWaveIndexer implements WaveBus. } @Override - public synchronized void remakeIndex() throws WaveletStateException, WaveServerException { + public synchronized void remakeIndex() throws WaveServerException { /*- * To fully rebuild the index, need to delete everything first http://git-wip-us.apache.org/repos/asf/incubator-wave/blob/80369760/src/org/waveprotocol/box/server/waveserver/WaveMap.java ---------------------------------------------------------------------- diff --git a/src/org/waveprotocol/box/server/waveserver/WaveMap.java b/src/org/waveprotocol/box/server/waveserver/WaveMap.java index 09ee788..b2fa769 100644 --- a/src/org/waveprotocol/box/server/waveserver/WaveMap.java +++ b/src/org/waveprotocol/box/server/waveserver/WaveMap.java @@ -28,9 +28,9 @@ import com.google.common.util.concurrent.ListenableFuture; import com.google.common.util.concurrent.ListenableFutureTask; import com.google.inject.Inject; import com.google.inject.name.Named; - import org.waveprotocol.box.common.ExceptionalIterator; -import org.waveprotocol.box.server.CoreSettings; +import org.waveprotocol.box.server.CoreSettingsNames; +import org.waveprotocol.box.server.executor.ExecutorAnnotations.LookupExecutor; import org.waveprotocol.box.server.persistence.PersistenceException; import org.waveprotocol.wave.model.id.WaveId; import org.waveprotocol.wave.model.id.WaveletId; @@ -41,7 +41,6 @@ import java.util.Map; import java.util.concurrent.Callable; import java.util.concurrent.ExecutionException; import java.util.concurrent.Executor; -import org.waveprotocol.box.server.executor.ExecutorAnnotations.LookupExecutor; /** * A collection of wavelets, local and remote, held in memory. @@ -57,13 +56,13 @@ public class WaveMap { private static ListenableFuture<ImmutableSet<WaveletId>> lookupWavelets( final WaveId waveId, final WaveletStore<?> waveletStore, Executor lookupExecutor) { ListenableFutureTask<ImmutableSet<WaveletId>> task = - ListenableFutureTask.<ImmutableSet<WaveletId>>create( - new Callable<ImmutableSet<WaveletId>>() { - @Override - public ImmutableSet<WaveletId> call() throws PersistenceException { - return waveletStore.lookup(waveId); - } - }); + ListenableFutureTask.create( + new Callable<ImmutableSet<WaveletId>>() { + @Override + public ImmutableSet<WaveletId> call() throws PersistenceException { + return waveletStore.lookup(waveId); + } + }); lookupExecutor.execute(task); return task; } @@ -74,10 +73,9 @@ public class WaveMap { @Inject public WaveMap(final DeltaAndSnapshotStore waveletStore, final WaveletNotificationSubscriber notifiee, - WaveBus dispatcher, final LocalWaveletContainer.Factory localFactory, final RemoteWaveletContainer.Factory remoteFactory, - @Named(CoreSettings.WAVE_SERVER_DOMAIN) final String waveDomain, + @Named(CoreSettingsNames.WAVE_SERVER_DOMAIN) final String waveDomain, @LookupExecutor final Executor lookupExecutor) { // NOTE(anorth): DeltaAndSnapshotStore is more specific than necessary, but // helps Guice out. @@ -157,12 +155,8 @@ public class WaveMap { WaveletContainer waveletContainer = null; try { waveletContainer = getRemoteWavelet(waveletName); - } catch (WaveletStateException e) { + } catch (WaveletStateException | NullPointerException e) { // Ignored. - } catch (NullPointerException e) { - // This is a fairly normal case of it being a local-only wave. - // Yet this only seems to appear in the test suite. - // Continuing is completely harmless here. } if (waveletContainer == null) { http://git-wip-us.apache.org/repos/asf/incubator-wave/blob/80369760/src/org/waveprotocol/box/server/waveserver/WaveServerModule.java ---------------------------------------------------------------------- diff --git a/src/org/waveprotocol/box/server/waveserver/WaveServerModule.java b/src/org/waveprotocol/box/server/waveserver/WaveServerModule.java index 5743594..41d60bf 100644 --- a/src/org/waveprotocol/box/server/waveserver/WaveServerModule.java +++ b/src/org/waveprotocol/box/server/waveserver/WaveServerModule.java @@ -20,29 +20,17 @@ package org.waveprotocol.box.server.waveserver; import com.google.common.annotations.VisibleForTesting; -import com.google.common.cache.CacheBuilder; import com.google.common.util.concurrent.ListenableFuture; import com.google.common.util.concurrent.ListenableFutureTask; import com.google.inject.AbstractModule; import com.google.inject.Inject; import com.google.inject.Provides; import com.google.inject.Singleton; -import com.google.inject.name.Named; -import com.google.inject.name.Names; - -import org.waveprotocol.box.server.CoreSettings; +import com.typesafe.config.Config; +import org.waveprotocol.box.server.executor.ExecutorAnnotations.StorageContinuationExecutor; +import org.waveprotocol.box.server.executor.ExecutorAnnotations.WaveletLoadExecutor; import org.waveprotocol.box.server.persistence.PersistenceException; -import org.waveprotocol.wave.crypto.CachedCertPathValidator; -import org.waveprotocol.wave.crypto.CertPathStore; -import org.waveprotocol.wave.crypto.DefaultCacheImpl; -import org.waveprotocol.wave.crypto.DefaultTimeSource; -import org.waveprotocol.wave.crypto.DefaultTrustRootsProvider; -import org.waveprotocol.wave.crypto.DisabledCertPathValidator; -import org.waveprotocol.wave.crypto.TimeSource; -import org.waveprotocol.wave.crypto.TrustRootsProvider; -import org.waveprotocol.wave.crypto.VerifiedCertChainCache; -import org.waveprotocol.wave.crypto.WaveCertPathValidator; -import org.waveprotocol.wave.crypto.WaveSignatureVerifier; +import org.waveprotocol.wave.crypto.*; import org.waveprotocol.wave.model.id.IdURIEncoderDecoder; import org.waveprotocol.wave.model.id.WaveletName; import org.waveprotocol.wave.model.version.HashedVersionFactory; @@ -51,9 +39,6 @@ import org.waveprotocol.wave.util.escapers.jvm.JavaUrlCodec; import java.util.concurrent.Callable; import java.util.concurrent.Executor; -import java.util.concurrent.Executors; -import org.waveprotocol.box.server.executor.ExecutorAnnotations.StorageContinuationExecutor; -import org.waveprotocol.box.server.executor.ExecutorAnnotations.WaveletLoadExecutor; /** * Guice Module for the prototype Server. @@ -70,10 +55,10 @@ public class WaveServerModule extends AbstractModule { @Inject - WaveServerModule(@Named(CoreSettings.ENABLE_FEDERATION) boolean enableFederation, + WaveServerModule(Config config, @WaveletLoadExecutor Executor waveletLoadExecutor, @StorageContinuationExecutor Executor storageContinuationExecutor) { - this.enableFederation = enableFederation; + this.enableFederation = config.getBoolean("federation.enable_federation"); this.waveletLoadExecutor = waveletLoadExecutor; this.storageContinuationExecutor = storageContinuationExecutor; } @@ -142,18 +127,18 @@ public class WaveServerModule extends AbstractModule { }; } - @Provides - @SuppressWarnings("unused") - private WaveCertPathValidator provideWaveCertPathValidator( - @Named(CoreSettings.WAVESERVER_DISABLE_SIGNER_VERIFICATION) boolean disableSignerVerification, - TimeSource timeSource, VerifiedCertChainCache certCache, - TrustRootsProvider trustRootsProvider) { - if (disableSignerVerification) { - return new DisabledCertPathValidator(); - } else { - return new CachedCertPathValidator(certCache, timeSource, trustRootsProvider); + @Provides + @SuppressWarnings("unused") + private WaveCertPathValidator provideWaveCertPathValidator(Config config, + TimeSource timeSource, + VerifiedCertChainCache certCache, + TrustRootsProvider trustRootsProvider) { + if (config.getBoolean("federation.waveserver_disable_signer_verification")) { + return new DisabledCertPathValidator(); + } else { + return new CachedCertPathValidator(certCache, timeSource, trustRootsProvider); + } } - } /** * Returns a future whose result is the state of the wavelet after it has been @@ -164,14 +149,14 @@ public class WaveServerModule extends AbstractModule { static ListenableFuture<DeltaStoreBasedWaveletState> loadWaveletState(Executor executor, final DeltaStore deltaStore, final WaveletName waveletName, final Executor persistExecutor) { ListenableFutureTask<DeltaStoreBasedWaveletState> task = - ListenableFutureTask.<DeltaStoreBasedWaveletState>create( - new Callable<DeltaStoreBasedWaveletState>() { - @Override - public DeltaStoreBasedWaveletState call() throws PersistenceException { - return DeltaStoreBasedWaveletState.create(deltaStore.open(waveletName), - persistExecutor); - } - }); + ListenableFutureTask.create( + new Callable<DeltaStoreBasedWaveletState>() { + @Override + public DeltaStoreBasedWaveletState call() throws PersistenceException { + return DeltaStoreBasedWaveletState.create(deltaStore.open(waveletName), + persistExecutor); + } + }); executor.execute(task); return task; } http://git-wip-us.apache.org/repos/asf/incubator-wave/blob/80369760/src/org/waveprotocol/wave/federation/FederationSettings.java ---------------------------------------------------------------------- diff --git a/src/org/waveprotocol/wave/federation/FederationSettings.java b/src/org/waveprotocol/wave/federation/FederationSettings.java deleted file mode 100644 index bad3199..0000000 --- a/src/org/waveprotocol/wave/federation/FederationSettings.java +++ /dev/null @@ -1,82 +0,0 @@ -/** - * 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.waveprotocol.wave.federation; - -import org.waveprotocol.wave.util.settings.Setting; - -import java.util.List; - -/** - * Settings specific to federation. - */ -@SuppressWarnings("unused") // We inject them by the name of their flag -public class FederationSettings { - public static final String XMPP_SERVER_HOSTNAME = "xmpp_server_hostname"; - public static final String XMPP_SERVER_SECRET = "xmpp_server_secret"; - public static final String XMPP_COMPONENT_NAME = "xmpp_component_name"; - public static final String XMPP_SERVER_COMPONENT_PORT = "xmpp_server_component_port"; - public static final String XMPP_SERVER_IP = "xmpp_server_ip"; - public static final String XMPP_SERVER_DESCRIPTION = "xmpp_server_description"; - public static final String XMPP_DISCO_FAILED_EXPIRY_SECS = "xmpp_disco_failed_expiry_secs"; - public static final String XMPP_DISCO_SUCCESSFUL_EXPIRY_SECS = "xmpp_disco_successful_expiry_secs"; - public static final String XMPP_JID = "xmpp_jid"; - - public static final String CERTIFICATE_PRIVATE_KEY = "certificate_private_key"; - public static final String CERTIFICATE_FILES = "certificate_files"; - public static final String CERTIFICATE_DOMAIN = "certificate_domain"; - - @Setting(name = XMPP_SERVER_HOSTNAME) - private static String xmppServerHostname; - - @Setting(name = XMPP_SERVER_SECRET) - private static String xmppServerSecret; - - @Setting(name = XMPP_COMPONENT_NAME) - private static String xmppComponentName; - - @Setting(name = XMPP_SERVER_COMPONENT_PORT) - private static int xmppServerPort; - - @Setting(name = XMPP_SERVER_IP) - private static String xmppServerIp; - - @Setting(name = XMPP_SERVER_DESCRIPTION) - private static String xmppServerDescription; - - // default value is 5 minutes - @Setting(name = XMPP_DISCO_FAILED_EXPIRY_SECS, defaultValue = "300") - private static int xmppDiscoFailedExpirySecs; - - // default value is 2 hours - @Setting(name = XMPP_DISCO_SUCCESSFUL_EXPIRY_SECS, defaultValue = "7200") - private static int xmppDiscoSuccessfulExpirySecs; - - @Setting(name = XMPP_JID) - private static String xmppJid; - - @Setting(name = CERTIFICATE_PRIVATE_KEY) - private static String certificatePrivKey; - - @Setting(name = CERTIFICATE_FILES, description = "comma separated WITH NO SPACES.") - private static List<String> certificateFiles; - - @Setting(name = CERTIFICATE_DOMAIN) - private static String certificateDomain; -} http://git-wip-us.apache.org/repos/asf/incubator-wave/blob/80369760/src/org/waveprotocol/wave/federation/xmpp/ComponentPacketTransport.java ---------------------------------------------------------------------- diff --git a/src/org/waveprotocol/wave/federation/xmpp/ComponentPacketTransport.java b/src/org/waveprotocol/wave/federation/xmpp/ComponentPacketTransport.java index bd7b06d..a98dbbc 100644 --- a/src/org/waveprotocol/wave/federation/xmpp/ComponentPacketTransport.java +++ b/src/org/waveprotocol/wave/federation/xmpp/ComponentPacketTransport.java @@ -20,10 +20,8 @@ package org.waveprotocol.wave.federation.xmpp; import com.google.inject.Inject; -import com.google.inject.name.Named; - +import com.typesafe.config.Config; import org.jivesoftware.whack.ExternalComponentManager; -import org.waveprotocol.wave.federation.FederationSettings; import org.xmpp.component.Component; import org.xmpp.component.ComponentException; import org.xmpp.component.ComponentManager; @@ -64,20 +62,15 @@ public class ComponentPacketTransport implements Component, OutgoingPacketTransp private boolean connected = false; @Inject - public ComponentPacketTransport(IncomingPacketHandler handler, - @Named(FederationSettings.XMPP_COMPONENT_NAME) String componentName, - @Named(FederationSettings.XMPP_SERVER_HOSTNAME) String serverDomain, - @Named(FederationSettings.XMPP_SERVER_SECRET) String serverSecret, - @Named(FederationSettings.XMPP_SERVER_IP) String serverAddress, - @Named(FederationSettings.XMPP_SERVER_COMPONENT_PORT) int serverPort) { + public ComponentPacketTransport(IncomingPacketHandler handler, Config config) { this.handler = handler; - this.componentName = componentName; - this.serverDomain = serverDomain; - this.serverSecret = serverSecret; - this.serverAddress = serverAddress; - this.serverPort = serverPort; + this.componentName = config.getString("federation.xmpp_component_name"); + this.serverDomain = config.getString("federation.xmpp_server_hostname"); + this.serverSecret = config.getString("federation.xmpp_server_secret"); + this.serverAddress = config.getString("federation.xmpp_server_ip"); + this.serverPort = config.getInt("federation.xmpp_server_component_port"); - queuedPackets = new LinkedList<Packet>(); + queuedPackets = new LinkedList<>(); } /** http://git-wip-us.apache.org/repos/asf/incubator-wave/blob/80369760/src/org/waveprotocol/wave/federation/xmpp/RemoteDisco.java ---------------------------------------------------------------------- diff --git a/src/org/waveprotocol/wave/federation/xmpp/RemoteDisco.java b/src/org/waveprotocol/wave/federation/xmpp/RemoteDisco.java index 1ea43c5..b6d5868 100644 --- a/src/org/waveprotocol/wave/federation/xmpp/RemoteDisco.java +++ b/src/org/waveprotocol/wave/federation/xmpp/RemoteDisco.java @@ -67,8 +67,8 @@ public class RemoteDisco { static final int DISCO_INFO_TIMEOUT = 20; private final long creationTimeMillis; - private final int failExpirySecs; - private final int successExpirySecs; + private final long failExpirySecs; + private final long successExpirySecs; enum Status { INIT, PENDING, COMPLETE @@ -113,8 +113,8 @@ public class RemoteDisco { * @param failExpirySecs how long to keep alive a failed disco result * @param successExpirySecs how long to keep alive a successful disco result */ - public RemoteDisco(XmppManager manager, String remoteDomain, int failExpirySecs, - int successExpirySecs) { + public RemoteDisco(XmppManager manager, String remoteDomain, long failExpirySecs, + long successExpirySecs) { this.manager = manager; status = new AtomicReference<Status>(Status.INIT); pending = new ConcurrentLinkedQueue<SuccessFailCallback<String, String>>(); http://git-wip-us.apache.org/repos/asf/incubator-wave/blob/80369760/src/org/waveprotocol/wave/federation/xmpp/XmppDisco.java ---------------------------------------------------------------------- diff --git a/src/org/waveprotocol/wave/federation/xmpp/XmppDisco.java b/src/org/waveprotocol/wave/federation/xmpp/XmppDisco.java index 79148f5..3e03ef7 100644 --- a/src/org/waveprotocol/wave/federation/xmpp/XmppDisco.java +++ b/src/org/waveprotocol/wave/federation/xmpp/XmppDisco.java @@ -20,29 +20,23 @@ package org.waveprotocol.wave.federation.xmpp; import com.google.common.annotations.VisibleForTesting; -import com.google.common.base.Function; import com.google.common.base.Preconditions; import com.google.common.cache.CacheBuilder; import com.google.common.cache.CacheLoader; import com.google.common.cache.LoadingCache; -import com.google.common.collect.MapMaker; import com.google.inject.Inject; -import com.google.inject.name.Named; +import com.typesafe.config.Config; +import org.dom4j.Element; +import org.waveprotocol.wave.federation.FederationErrorProto.FederationError; +import org.waveprotocol.wave.federation.FederationErrors; +import org.xmpp.packet.IQ; -import java.util.Map; import java.util.concurrent.ExecutionException; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicLong; import java.util.logging.Level; import java.util.logging.Logger; -import org.dom4j.Element; -import org.xmpp.packet.IQ; - -import org.waveprotocol.wave.federation.FederationErrorProto.FederationError; -import org.waveprotocol.wave.federation.FederationErrors; -import org.waveprotocol.wave.federation.FederationSettings; - /** * Implementation of XMPP Discovery. Provides public methods to respond to incoming disco requests * (via {@link XmppManager}), as well as outgoing disco via {{@link #discoverRemoteJid}. @@ -55,14 +49,11 @@ public class XmppDisco { @SuppressWarnings("unused") private static final Logger LOG = Logger.getLogger(XmppDisco.class.getCanonicalName()); - static final String DISCO_INFO_CATEGORY = "collaboration"; - static final String DISCO_INFO_TYPE = "google-wave"; - // This tracks the number of disco attempts started. public static final LoadingCache<String, AtomicLong> statDiscoStarted = CacheBuilder.newBuilder().build(new CacheLoader<String, AtomicLong>() { @Override - public AtomicLong load(String domain) { + public AtomicLong load(@SuppressWarnings("NullableProblems") String domain) { return new AtomicLong(); } }); @@ -71,29 +62,29 @@ public class XmppDisco { private final String serverDescription; private XmppManager manager = null; - private static int DISCO_EXPIRATION_HOURS = 6; // Accessed by XmppFederationHostForDomain. - final int failExpirySecs; - final int successExpirySecs; + final long failExpirySecs; + final long successExpirySecs; + final long discoExpirationHours; + final String discoInfoCategory; + final String discoInfoType; /** * Constructor. Note that {@link #setManager} must be called before this class is ready to use. - * - * @param serverDescription the name of this server - passed in from flags - * @param failExpirySecs how long to cache failed disco results - * @param successExpirySecs how long to cache successful disco results */ @Inject - public XmppDisco(@Named(FederationSettings.XMPP_SERVER_DESCRIPTION) String serverDescription, - @Named(FederationSettings.XMPP_DISCO_FAILED_EXPIRY_SECS) final int failExpirySecs, - @Named(FederationSettings.XMPP_DISCO_SUCCESSFUL_EXPIRY_SECS) final int successExpirySecs) { - this.serverDescription = serverDescription; - this.failExpirySecs = failExpirySecs; - this.successExpirySecs = successExpirySecs; - + public XmppDisco(Config config) { + this.serverDescription = config.getString("federation.xmpp_server_description"); + this.discoInfoCategory = config.getString("federation.disco_info_category"); + this.discoInfoType = config.getString("federation.disco_info_type"); + this.failExpirySecs = config.getDuration("federation.xmpp_disco_failed_expiry", TimeUnit.SECONDS); + this.successExpirySecs = config.getDuration("federation.xmpp_disco_successful_expiry", TimeUnit.SECONDS); + this.discoExpirationHours = config.getDuration("federation.disco_expiration", TimeUnit.HOURS); + + //noinspection NullableProblems discoRequests = CacheBuilder.newBuilder().expireAfterWrite( - DISCO_EXPIRATION_HOURS, TimeUnit.HOURS).build( + discoExpirationHours, TimeUnit.HOURS).build( new CacheLoader<String, RemoteDisco>() { @Override @@ -125,9 +116,9 @@ public class XmppDisco { Element query = response.setChildElement("query", XmppNamespace.NAMESPACE_DISCO_INFO); query.addElement("identity") - .addAttribute("category", DISCO_INFO_CATEGORY) - .addAttribute("type", DISCO_INFO_TYPE) - .addAttribute("name", serverDescription); + .addAttribute("category", discoInfoCategory) + .addAttribute("type", discoInfoType) + .addAttribute("name", serverDescription); query.addElement("feature") .addAttribute("var", XmppNamespace.NAMESPACE_WAVE_SERVER); http://git-wip-us.apache.org/repos/asf/incubator-wave/blob/80369760/src/org/waveprotocol/wave/federation/xmpp/XmppFederationHost.java ---------------------------------------------------------------------- diff --git a/src/org/waveprotocol/wave/federation/xmpp/XmppFederationHost.java b/src/org/waveprotocol/wave/federation/xmpp/XmppFederationHost.java index 7194584..09c76d1 100644 --- a/src/org/waveprotocol/wave/federation/xmpp/XmppFederationHost.java +++ b/src/org/waveprotocol/wave/federation/xmpp/XmppFederationHost.java @@ -23,23 +23,21 @@ import com.google.common.cache.CacheBuilder; import com.google.common.cache.CacheLoader; import com.google.common.cache.LoadingCache; import com.google.inject.Inject; -import com.google.inject.name.Named; import com.google.protobuf.ByteString; import com.google.protobuf.InvalidProtocolBufferException; - +import com.typesafe.config.Config; import org.dom4j.Element; +import org.waveprotocol.wave.federation.FederationErrorProto.FederationError; import org.waveprotocol.wave.federation.FederationErrors; import org.waveprotocol.wave.federation.FederationHostBridge; -import org.waveprotocol.wave.federation.FederationSettings; -import org.waveprotocol.wave.federation.WaveletFederationListener; -import org.waveprotocol.wave.federation.WaveletFederationProvider; -import org.waveprotocol.wave.federation.FederationErrorProto.FederationError; import org.waveprotocol.wave.federation.Proto.ProtocolHashedVersion; import org.waveprotocol.wave.federation.Proto.ProtocolSignedDelta; import org.waveprotocol.wave.federation.Proto.ProtocolSignerInfo; +import org.waveprotocol.wave.federation.WaveletFederationListener; +import org.waveprotocol.wave.federation.WaveletFederationProvider; import org.waveprotocol.wave.federation.xmpp.XmppUtil.UnknownSignerType; -import org.waveprotocol.wave.model.id.WaveletName; import org.waveprotocol.wave.model.id.URIEncoderDecoder.EncodingException; +import org.waveprotocol.wave.model.id.WaveletName; import org.xmpp.packet.IQ; import java.util.List; @@ -56,21 +54,13 @@ public class XmppFederationHost implements WaveletFederationListener.Factory { private static final Logger LOG = Logger.getLogger(XmppFederationHost.class.getCanonicalName()); private final WaveletFederationProvider waveletProvider; - private final XmppDisco disco; - private final String jid; private XmppManager manager = null; // A map of update listeners. There is one per remote domain we are sending updates to. // The name 'listener' refers to them listening for updates from the waveserver to send to the // network. - private final LoadingCache<String, WaveletFederationListener> listeners = - CacheBuilder.newBuilder().build(new CacheLoader<String, WaveletFederationListener>() { - @Override - public WaveletFederationListener load(String domain) { - return new XmppFederationHostForDomain(domain, manager, disco, jid); - } - }); + private final LoadingCache<String, WaveletFederationListener> listeners; /** * Constructor. Note that {@link #setManager} must be called before this class @@ -78,15 +68,18 @@ public class XmppFederationHost implements WaveletFederationListener.Factory { * * @param waveletProvider used for communicating back to the Host part of the * wavelet server. - * @param disco used for discovery - * @param jid this server's local JID + * @param disco used for discovery */ @Inject public XmppFederationHost(@FederationHostBridge WaveletFederationProvider waveletProvider, - XmppDisco disco, @Named(FederationSettings.XMPP_JID) String jid) { + final XmppDisco disco, final Config config) { this.waveletProvider = waveletProvider; - this.disco = disco; - this.jid = jid; + listeners = CacheBuilder.newBuilder().build(new CacheLoader<String, WaveletFederationListener>() { + @Override + public WaveletFederationListener load(@SuppressWarnings("NullableProblems") String domain) { + return new XmppFederationHostForDomain(domain, manager, disco, config); + } + }); } /** http://git-wip-us.apache.org/repos/asf/incubator-wave/blob/80369760/src/org/waveprotocol/wave/federation/xmpp/XmppFederationHostForDomain.java ---------------------------------------------------------------------- diff --git a/src/org/waveprotocol/wave/federation/xmpp/XmppFederationHostForDomain.java b/src/org/waveprotocol/wave/federation/xmpp/XmppFederationHostForDomain.java index 2b077f3..d809b33 100644 --- a/src/org/waveprotocol/wave/federation/xmpp/XmppFederationHostForDomain.java +++ b/src/org/waveprotocol/wave/federation/xmpp/XmppFederationHostForDomain.java @@ -20,17 +20,15 @@ package org.waveprotocol.wave.federation.xmpp; import com.google.inject.Inject; -import com.google.inject.name.Named; import com.google.protobuf.ByteString; - +import com.typesafe.config.Config; import org.dom4j.Element; -import org.waveprotocol.wave.federation.FederationErrors; -import org.waveprotocol.wave.federation.FederationSettings; -import org.waveprotocol.wave.federation.WaveletFederationListener; import org.waveprotocol.wave.federation.FederationErrorProto.FederationError; +import org.waveprotocol.wave.federation.FederationErrors; import org.waveprotocol.wave.federation.Proto.ProtocolHashedVersion; -import org.waveprotocol.wave.model.id.WaveletName; +import org.waveprotocol.wave.federation.WaveletFederationListener; import org.waveprotocol.wave.model.id.URIEncoderDecoder.EncodingException; +import org.waveprotocol.wave.model.id.WaveletName; import org.xmpp.packet.Message; import org.xmpp.packet.Packet; @@ -58,10 +56,10 @@ class XmppFederationHostForDomain implements WaveletFederationListener { @Inject public XmppFederationHostForDomain(final String domain, XmppManager manager, - XmppDisco disco, @Named(FederationSettings.XMPP_JID) String jid) { + XmppDisco disco, Config config) { this.remoteDomain = domain; this.manager = manager; - this.jid = jid; + this.jid = config.getString("federation.xmpp_jid"); this.disco = disco; } http://git-wip-us.apache.org/repos/asf/incubator-wave/blob/80369760/src/org/waveprotocol/wave/federation/xmpp/XmppFederationRemote.java ---------------------------------------------------------------------- diff --git a/src/org/waveprotocol/wave/federation/xmpp/XmppFederationRemote.java b/src/org/waveprotocol/wave/federation/xmpp/XmppFederationRemote.java index c2d8a55..a28bd72 100644 --- a/src/org/waveprotocol/wave/federation/xmpp/XmppFederationRemote.java +++ b/src/org/waveprotocol/wave/federation/xmpp/XmppFederationRemote.java @@ -23,24 +23,22 @@ import com.google.common.base.Preconditions; import com.google.common.collect.ImmutableList; import com.google.common.collect.Lists; import com.google.inject.Inject; -import com.google.inject.name.Named; import com.google.protobuf.ByteString; - +import com.typesafe.config.Config; import org.apache.commons.codec.binary.Base64; import org.dom4j.Attribute; import org.dom4j.Element; +import org.waveprotocol.wave.federation.FederationErrorProto.FederationError; import org.waveprotocol.wave.federation.FederationErrors; import org.waveprotocol.wave.federation.FederationRemoteBridge; -import org.waveprotocol.wave.federation.FederationSettings; -import org.waveprotocol.wave.federation.WaveletFederationListener; -import org.waveprotocol.wave.federation.WaveletFederationProvider; -import org.waveprotocol.wave.federation.FederationErrorProto.FederationError; import org.waveprotocol.wave.federation.Proto.ProtocolHashedVersion; import org.waveprotocol.wave.federation.Proto.ProtocolSignedDelta; import org.waveprotocol.wave.federation.Proto.ProtocolSignerInfo; +import org.waveprotocol.wave.federation.WaveletFederationListener; +import org.waveprotocol.wave.federation.WaveletFederationProvider; import org.waveprotocol.wave.federation.xmpp.XmppUtil.UnknownSignerType; -import org.waveprotocol.wave.model.id.WaveletName; import org.waveprotocol.wave.model.id.URIEncoderDecoder.EncodingException; +import org.waveprotocol.wave.model.id.WaveletName; import org.xmpp.packet.IQ; import org.xmpp.packet.Message; import org.xmpp.packet.Packet; @@ -77,10 +75,10 @@ public class XmppFederationRemote implements WaveletFederationProvider { @Inject public XmppFederationRemote( @FederationRemoteBridge WaveletFederationListener.Factory updatesListenerFactory, - XmppDisco disco, @Named(FederationSettings.XMPP_JID) String jid) { + XmppDisco disco, Config config) { this.updatesListenerFactory = updatesListenerFactory; this.disco = disco; - this.jid = jid; + this.jid = config.getString("federation.xmpp_jid"); } /** @@ -531,30 +529,35 @@ public class XmppFederationRemote implements WaveletFederationProvider { for (Element itemElement : (List<Element>) items.elements()) { for (Element element : (List<Element>) itemElement.elements()) { String elementName = element.getQName().getName(); - if (elementName.equals("applied-delta")) { - String deltaBody = element.getText(); - deltaList.add(ByteString.copyFrom(Base64.decodeBase64(deltaBody.getBytes()))); - } else if (elementName.equals("commit-notice")) { - Attribute commitVersion = element.attribute("version"); - if (commitVersion != null) { - try { - lastCommittedVersion = Long.parseLong(commitVersion.getValue()); - } catch (NumberFormatException e) { - lastCommittedVersion = -1; + switch (elementName) { + case "applied-delta": + String deltaBody = element.getText(); + deltaList.add(ByteString.copyFrom(Base64.decodeBase64(deltaBody.getBytes()))); + break; + case "commit-notice": + Attribute commitVersion = element.attribute("version"); + if (commitVersion != null) { + try { + lastCommittedVersion = Long.parseLong(commitVersion.getValue()); + } catch (NumberFormatException e) { + lastCommittedVersion = -1; + } } - } - } else if (elementName.equals("history-truncated")) { - Attribute truncVersion = element.attribute("version"); - if (truncVersion != null) { - try { - versionTruncatedAt = Long.parseLong(truncVersion.getValue()); - } catch (NumberFormatException e) { - versionTruncatedAt = -1; + break; + case "history-truncated": + Attribute truncVersion = element.attribute("version"); + if (truncVersion != null) { + try { + versionTruncatedAt = Long.parseLong(truncVersion.getValue()); + } catch (NumberFormatException e) { + versionTruncatedAt = -1; + } } - } - } else { - listener.onFailure(FederationErrors.badRequest( - "Bad response packet: " + historyResponse)); + break; + default: + listener.onFailure(FederationErrors.badRequest( + "Bad response packet: " + historyResponse)); + break; } } } http://git-wip-us.apache.org/repos/asf/incubator-wave/blob/80369760/src/org/waveprotocol/wave/federation/xmpp/XmppManager.java ---------------------------------------------------------------------- diff --git a/src/org/waveprotocol/wave/federation/xmpp/XmppManager.java b/src/org/waveprotocol/wave/federation/xmpp/XmppManager.java index 4dad3b6..e0f2fb7 100644 --- a/src/org/waveprotocol/wave/federation/xmpp/XmppManager.java +++ b/src/org/waveprotocol/wave/federation/xmpp/XmppManager.java @@ -23,22 +23,16 @@ import com.google.common.annotations.VisibleForTesting; import com.google.common.base.Preconditions; import com.google.common.collect.MapMaker; import com.google.inject.Inject; -import com.google.inject.name.Named; - +import com.typesafe.config.Config; import org.dom4j.Element; import org.waveprotocol.wave.federation.FederationErrorProto.FederationError; import org.waveprotocol.wave.federation.FederationErrors; -import org.waveprotocol.wave.federation.FederationSettings; import org.xmpp.packet.IQ; import org.xmpp.packet.Message; import org.xmpp.packet.Packet; import org.xmpp.packet.PacketError; -import java.util.concurrent.ConcurrentMap; -import java.util.concurrent.Executors; -import java.util.concurrent.ScheduledExecutorService; -import java.util.concurrent.ScheduledFuture; -import java.util.concurrent.TimeUnit; +import java.util.concurrent.*; import java.util.logging.Level; import java.util.logging.Logger; @@ -120,12 +114,12 @@ public class XmppManager implements IncomingPacketHandler { @Inject public XmppManager(XmppFederationHost host, XmppFederationRemote remote, XmppDisco disco, - OutgoingPacketTransport transport, @Named(FederationSettings.XMPP_JID) String jid) { + OutgoingPacketTransport transport, Config config) { this.host = host; this.remote = remote; this.disco = disco; this.transport = transport; - this.jid = jid; + this.jid = config.getString("federation.xmpp_jid"); // Configure all related objects with this manager. Eventually, this should // be replaced by better Guice interface bindings. @@ -328,12 +322,16 @@ public class XmppManager implements IncomingPacketHandler { sendErrorResponse(iq, FederationError.Code.BAD_REQUEST, "Unhandled pubsub request"); } } else if (!isIQSet) { - if (namespace.equals(XmppNamespace.NAMESPACE_DISCO_INFO)) { - disco.processDiscoInfoGet(iq, responseCallback); - } else if (namespace.equals(XmppNamespace.NAMESPACE_DISCO_ITEMS)) { - disco.processDiscoItemsGet(iq, responseCallback); - } else { - sendErrorResponse(iq, FederationError.Code.BAD_REQUEST, "Unhandled IQ get"); + switch (namespace) { + case XmppNamespace.NAMESPACE_DISCO_INFO: + disco.processDiscoInfoGet(iq, responseCallback); + break; + case XmppNamespace.NAMESPACE_DISCO_ITEMS: + disco.processDiscoItemsGet(iq, responseCallback); + break; + default: + sendErrorResponse(iq, FederationError.Code.BAD_REQUEST, "Unhandled IQ get"); + break; } } else { sendErrorResponse(iq, FederationError.Code.BAD_REQUEST, "Unhandled IQ set"); http://git-wip-us.apache.org/repos/asf/incubator-wave/blob/80369760/src/org/waveprotocol/wave/util/settings/Setting.java ---------------------------------------------------------------------- diff --git a/src/org/waveprotocol/wave/util/settings/Setting.java b/src/org/waveprotocol/wave/util/settings/Setting.java deleted file mode 100644 index 6fad10f..0000000 --- a/src/org/waveprotocol/wave/util/settings/Setting.java +++ /dev/null @@ -1,37 +0,0 @@ -/** - * 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.waveprotocol.wave.util.settings; - -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; - -/** - * A setting descriptor. All settings are mandatory unless explicitly specified - * otherwise. - */ -@Retention(RetentionPolicy.RUNTIME) -@Target(ElementType.FIELD) -public @interface Setting { - String name(); - String description() default ""; - String defaultValue() default ""; -}
