You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@clerezza.apache.org by re...@apache.org on 2011/03/18 00:50:34 UTC
svn commit: r1082755 - in /incubator/clerezza/trunk/parent/shell/src/main:
resources/OSGI-INF/ scala/org/apache/clerezza/shell/
Author: reto
Date: Thu Mar 17 23:50:34 2011
New Revision: 1082755
URL: http://svn.apache.org/viewvc?rev=1082755&view=rev
Log:
CLEREZZA-464: Added support for ShellCustomizerS. Its now possible to provide additional objects and import available on any shell
Added:
incubator/clerezza/trunk/parent/shell/src/main/scala/org/apache/clerezza/shell/ShellCustomizer.scala
Modified:
incubator/clerezza/trunk/parent/shell/src/main/resources/OSGI-INF/serviceComponents.xml
incubator/clerezza/trunk/parent/shell/src/main/scala/org/apache/clerezza/shell/Shell.scala
incubator/clerezza/trunk/parent/shell/src/main/scala/org/apache/clerezza/shell/ShellCommand.scala
incubator/clerezza/trunk/parent/shell/src/main/scala/org/apache/clerezza/shell/ShellFactory.scala
Modified: incubator/clerezza/trunk/parent/shell/src/main/resources/OSGI-INF/serviceComponents.xml
URL: http://svn.apache.org/viewvc/incubator/clerezza/trunk/parent/shell/src/main/resources/OSGI-INF/serviceComponents.xml?rev=1082755&r1=1082754&r2=1082755&view=diff
==============================================================================
--- incubator/clerezza/trunk/parent/shell/src/main/resources/OSGI-INF/serviceComponents.xml (original)
+++ incubator/clerezza/trunk/parent/shell/src/main/resources/OSGI-INF/serviceComponents.xml Thu Mar 17 23:50:34 2011
@@ -22,5 +22,9 @@
interface="org.apache.clerezza.shell.ShellCommand"
cardinality="0..n"
bind="bindCommand" unbind="unbindCommand"/>
+ <reference name="customizers"
+ interface="org.apache.clerezza.shell.ShellCustomizer"
+ cardinality="0..n"
+ bind="bindCustomizer" unbind="unbindCustomizer"/>
</scr:component>
</components>
Modified: incubator/clerezza/trunk/parent/shell/src/main/scala/org/apache/clerezza/shell/Shell.scala
URL: http://svn.apache.org/viewvc/incubator/clerezza/trunk/parent/shell/src/main/scala/org/apache/clerezza/shell/Shell.scala?rev=1082755&r1=1082754&r2=1082755&view=diff
==============================================================================
--- incubator/clerezza/trunk/parent/shell/src/main/scala/org/apache/clerezza/shell/Shell.scala (original)
+++ incubator/clerezza/trunk/parent/shell/src/main/scala/org/apache/clerezza/shell/Shell.scala Thu Mar 17 23:50:34 2011
@@ -219,4 +219,10 @@ object Shell {
trait TerminationListener {
def terminated: Unit
}
+
+ trait Environment {
+ val componentContext: ComponentContext;
+ val in: InputStream;
+ val out: OutputStream;
+ }
}
\ No newline at end of file
Modified: incubator/clerezza/trunk/parent/shell/src/main/scala/org/apache/clerezza/shell/ShellCommand.scala
URL: http://svn.apache.org/viewvc/incubator/clerezza/trunk/parent/shell/src/main/scala/org/apache/clerezza/shell/ShellCommand.scala?rev=1082755&r1=1082754&r2=1082755&view=diff
==============================================================================
--- incubator/clerezza/trunk/parent/shell/src/main/scala/org/apache/clerezza/shell/ShellCommand.scala (original)
+++ incubator/clerezza/trunk/parent/shell/src/main/scala/org/apache/clerezza/shell/ShellCommand.scala Thu Mar 17 23:50:34 2011
@@ -1,24 +1,24 @@
/*
- * Copyright 2010 reto.
- *
- * 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.
- * under the License.
+ * 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.apache.clerezza.shell
import java.io.OutputStream
-import java.io.Writer
trait ShellCommand {
def command: String
Added: incubator/clerezza/trunk/parent/shell/src/main/scala/org/apache/clerezza/shell/ShellCustomizer.scala
URL: http://svn.apache.org/viewvc/incubator/clerezza/trunk/parent/shell/src/main/scala/org/apache/clerezza/shell/ShellCustomizer.scala?rev=1082755&view=auto
==============================================================================
--- incubator/clerezza/trunk/parent/shell/src/main/scala/org/apache/clerezza/shell/ShellCustomizer.scala (added)
+++ incubator/clerezza/trunk/parent/shell/src/main/scala/org/apache/clerezza/shell/ShellCustomizer.scala Thu Mar 17 23:50:34 2011
@@ -0,0 +1,42 @@
+/*
+ * 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.apache.clerezza.shell
+
+
+import java.io.InputStream
+import java.io.OutputStream
+import org.osgi.service.component.ComponentContext
+
+/**
+ * A service implemebting this trait provides bjects and/or imports available
+ * on any shell by default
+ */
+trait ShellCustomizer {
+
+ /**
+ * A list of bindings that will be available in the shell
+ * The tuple consist of: bindingName, typeName, value
+ */
+ def bindings(e: Shell.Environment): List[(String, String, Any)]
+
+ /**
+ * A list of imports that will be available in the shell
+ */
+ def imports: List[String]
+}
Modified: incubator/clerezza/trunk/parent/shell/src/main/scala/org/apache/clerezza/shell/ShellFactory.scala
URL: http://svn.apache.org/viewvc/incubator/clerezza/trunk/parent/shell/src/main/scala/org/apache/clerezza/shell/ShellFactory.scala?rev=1082755&r1=1082754&r2=1082755&view=diff
==============================================================================
--- incubator/clerezza/trunk/parent/shell/src/main/scala/org/apache/clerezza/shell/ShellFactory.scala (original)
+++ incubator/clerezza/trunk/parent/shell/src/main/scala/org/apache/clerezza/shell/ShellFactory.scala Thu Mar 17 23:50:34 2011
@@ -34,9 +34,10 @@ class ShellFactory() {
- var interpreterFactory: InterpreterFactory = null
- var componentContext: ComponentContext = null
- var commands = Set[ShellCommand]()
+ private var interpreterFactory: InterpreterFactory = null
+ private var componentContext: ComponentContext = null
+ private var commands = Set[ShellCommand]()
+ private var customizers = Set[ShellCustomizer]()
def activate(componentContext: ComponentContext)= {
this.componentContext = componentContext
@@ -46,16 +47,29 @@ class ShellFactory() {
this.componentContext = componentContext
}
- def createShell(in: InputStream, out: OutputStream) = {
+ def createShell(pIn: InputStream, pOut: OutputStream) = {
AccessController.checkPermission(new ShellPermission())
AccessController.doPrivileged(new PrivilegedAction[Shell] {
override def run() = {
- val shell = new Shell(interpreterFactory, in, out, commands)
+ val shell = new Shell(interpreterFactory, pIn, pOut, commands)
//shell.bind("bundleContext", classOf[BundleContext].getName, componentContext.getBundleContext)
//shell.bind("componentContext", classOf[ComponentContext].getName, componentContext)
- shell.bind("osgiDsl", classOf[OsgiDsl].getName, new OsgiDsl(componentContext, out))
+ shell.bind("osgiDsl", classOf[OsgiDsl].getName, new OsgiDsl(componentContext, pOut))
shell.addImport("org.apache.clerezza.{scala => zzscala, _ }")
shell.addImport("osgiDsl._")
+ val environment = new Shell.Environment {
+ val componentContext: ComponentContext = ShellFactory.this.componentContext
+ val in: InputStream = pIn;
+ val out: OutputStream = pOut;
+ }
+ for (c <- customizers) {
+ for(b <- c.bindings(environment)) {
+ shell.bind(b._1, b._2, b._3)
+ }
+ for(i <- c.imports) {
+ shell.addImport(i)
+ }
+ }
shell
}
})
@@ -76,4 +90,12 @@ class ShellFactory() {
def unbindCommand(c: ShellCommand) = {
commands -= c
}
+
+ def bindCustomizer(c: ShellCustomizer) = {
+ customizers += c
+ }
+
+ def unbindCustomizer(c: ShellCustomizer) = {
+ customizers -= c
+ }
}
\ No newline at end of file