(no commit message)
[utils] / system / general / src / main / java / org / wamblee / system / core / Scope.java
diff --git a/system/general/src/main/java/org/wamblee/system/core/Scope.java b/system/general/src/main/java/org/wamblee/system/core/Scope.java
new file mode 100644 (file)
index 0000000..829435f
--- /dev/null
@@ -0,0 +1,77 @@
+/*
+ * Copyright 2008 the original author or authors.
+ * 
+ * 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 org.wamblee.system.core;
+
+/**
+ * A scope represents a set of running services and the runtime information for the 
+ * started components and is (usually) the result of 
+ * starting a container. 
+ * 
+ * @author Erik Brakkee
+ */
+public interface Scope {
+       
+       /**
+        * Gets the provided interfaces by this scope. 
+        * @return Provided interfaces. 
+        */
+       ProvidedInterface[] getProvidedInterfaces();
+       
+       /**
+        * Adds a key value pair to the scope. 
+        * @param aKey Key 
+        * @param aValue Value. 
+        */
+       void put(String aKey, Object aValue); 
+       
+       /**
+        * Retrieves a value for the key. 
+        * @param aKey Key.
+        * @return Value. 
+        */
+       Object get(String aKey);
+       
+       /**
+        * Adds the runtime of a started component. 
+        * @param aComponent Component. 
+        * @param aRuntime Runtime. 
+        */
+       void addRuntime(Component aComponent, Object aRuntime);
+       
+       /**
+        * Publishes an implementation of a provided interface. 
+        * @param aComponent Component that provides the interface.
+        * @param aInterface Interface that is provided.
+        * @param aImplementation Implementation of the interface.
+        * @return Returns a unique id of the published interface.  
+        */
+       void publishInterface(ProvidedInterface aInterface, Object aImplementation); 
+       
+       /**
+        * Retrieves an implementation of a provided interface. 
+        * @param aProvided Provided interface. If it is null then null is returned.  
+        * @param aType Type of implementation that is expected.
+        * @return Retrieved interface.
+        */
+       <T> T retrieveInterfaceImplementation(ProvidedInterface aProvided, Class<T> aType );
+
+       /**
+        * Gets the runtime for a component.  
+        * @param aComponent Component for which we want to get the runtime.  
+        * @return Runtime.  
+        */
+       Object getRuntime(Component aComponent); 
+}