/* * Copyright (C) 2012 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 interactivespaces.system.internal.osgi; import interactivespaces.configuration.Configuration; import interactivespaces.logging.ExtendedLog; import interactivespaces.logging.StandardExtendedLog; import interactivespaces.service.ServiceRegistry; import interactivespaces.service.SimpleServiceRegistry; import interactivespaces.system.InteractiveSpacesEnvironment; import interactivespaces.system.InteractiveSpacesFilesystem; import interactivespaces.system.InternalInteractiveSpacesEnvironment; import interactivespaces.system.core.logging.LoggingProvider; import interactivespaces.time.TimeProvider; import com.google.common.collect.Maps; import org.apache.commons.logging.Log; import java.util.concurrent.ConcurrentMap; import java.util.concurrent.ScheduledExecutorService; /** * A {@link InteractiveSpacesEnvironment} which lives in a ROS container. * * @author Keith M. Hughes */ public class RosOsgiInteractiveSpacesEnvironment implements InteractiveSpacesEnvironment, InternalInteractiveSpacesEnvironment { /** * The system configuration. */ private Configuration systemConfiguration; /** * The executor service to use for thread pools. */ private ScheduledExecutorService executorService; /** * The file system for Interactive Spaces. */ private InteractiveSpacesFilesystem filesystem; /** * Network type for the container. * * <p> * This allows distinguishing between different Interactive Spaces networks, e.g. localdev, prod, fredbot. */ private String networkType; /** * The time provider for everyone to use. */ private TimeProvider timeProvider; /** * Values stored in the environment. */ private ConcurrentMap<String, Object> values = Maps.newConcurrentMap(); /** * The service registry. */ private ServiceRegistry serviceRegistry = new SimpleServiceRegistry(this); /** * The platform logging provider. */ private LoggingProvider loggingProvider; /** * The extended logger. */ private ExtendedLog log; @Override public Configuration getSystemConfiguration() { return systemConfiguration; } @Override public String getNetworkType() { return networkType; } @Override public InteractiveSpacesFilesystem getFilesystem() { return filesystem; } @Override public ScheduledExecutorService getExecutorService() { return executorService; } @Override public Log getLog() { return log; } @Override public ExtendedLog getExtendedLog() { return log; } @Override public Log getLog(String logName, String level, String filename) { // TODO(keith): make this generate extended logs, though they will need to be in a map. return loggingProvider.getLog(logName, level, filename); } @Override public boolean modifyLogLevel(Log log, String level) { return loggingProvider.modifyLogLevel(log, level); } @Override public void releaseLog(Log log) { loggingProvider.releaseLog(log); } @Override public TimeProvider getTimeProvider() { return timeProvider; } @Override public ServiceRegistry getServiceRegistry() { return serviceRegistry; } @Override public <T> T getValue(String valueName) { @SuppressWarnings("unchecked") T value = (T) values.get(valueName); return value; } @Override public void setValue(String valueName, Object value) { values.put(valueName, value); } @Override public void removeValue(String valueName) { values.remove(valueName); } @Override public void setFilesystem(InteractiveSpacesFilesystem filesystem) { this.filesystem = filesystem; } @Override public void setNetworkType(String networkType) { this.networkType = networkType; } @Override public void setExecutorService(ScheduledExecutorService executorService) { this.executorService = executorService; } @Override public void setSystemConfiguration(Configuration systemConfiguration) { this.systemConfiguration = systemConfiguration; } @Override public void changeSystemConfigurationTop(Configuration newTopSystemConfiguration) { newTopSystemConfiguration.setParent(systemConfiguration); systemConfiguration = newTopSystemConfiguration; } @Override public void setTimeProvider(TimeProvider timeProvider) { this.timeProvider = timeProvider; } @Override public void setLoggingProvider(LoggingProvider loggingProvider) { this.loggingProvider = loggingProvider; log = new StandardExtendedLog(loggingProvider.getLog()); } }