/* * Copyright 2011 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 com.google.ipc.invalidation.ticl; import com.google.ipc.invalidation.external.client.SystemResources; /** * A simple implementation of {@code SystemResources} that just takes the resource components * and constructs a SystemResources object. * */ public class BasicSystemResources implements SystemResources { // Components comprising the system resources. We delegate calls to these as appropriate. private final Scheduler internalScheduler; private final Scheduler listenerScheduler; private final Logger logger; private final NetworkChannel network; private final Storage storage; /** The state of the resources. */ private RunState runState = new RunState(); /** Information about the client operating system/platform, e.g., Windows, ChromeOS. */ private final String platform; /** * Constructs an instance from resource components. * * @param logger implementation of the logger * @param internalScheduler scheduler for scheduling the library's internal events * @param listenerScheduler scheduler for scheduling the listener's events * @param network implementation of the network * @param storage implementation of storage * @param platform if not {@code null}, platform string for client version. If {@code null}, * a default string will be constructed. */ public BasicSystemResources(Logger logger, Scheduler internalScheduler, Scheduler listenerScheduler, NetworkChannel network, Storage storage, String platform) { this.logger = logger; this.storage = storage; this.network = network; if (platform != null) { this.platform = platform; } else { // If a platform string was not provided, try to compute a reasonable default. this.platform = System.getProperty("os.name") + "/" + System.getProperty("os.version") + "/" + System.getProperty("os.arch"); } this.internalScheduler = internalScheduler; this.listenerScheduler = listenerScheduler; // Pass a reference to this object to all of the components, so that they can access // resources. E.g., so that the network can do logging. logger.setSystemResources(this); storage.setSystemResources(this); network.setSystemResources(this); internalScheduler.setSystemResources(this); listenerScheduler.setSystemResources(this); } @Override public void start() { runState.start(); logger.info("Resources started"); } @Override public void stop() { runState.stop(); logger.info("Resources stopped"); } @Override public boolean isStarted() { return runState.isStarted(); } @Override public Logger getLogger() { return logger; } @Override public Storage getStorage() { return storage; } @Override public NetworkChannel getNetwork() { return network; } @Override public Scheduler getInternalScheduler() { return internalScheduler; } @Override public Scheduler getListenerScheduler() { return listenerScheduler; } @Override public String getPlatform() { return platform; } }