Author: reto
Date: Mon Nov 8 23:03:50 2010
New Revision: 1032781
URL: http://svn.apache.org/viewvc?rev=1032781&view=rev
Log:
CLEREZZA-353: started osgi console dsl with support to access services using
$[interfaceName]
Added:
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.shell/maven-eclipse.xml
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.shell/src/main/scala/org/apache/clerezza/shell/OsgiDsl.scala
Modified:
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.shell/src/main/scala/org/apache/clerezza/shell/Shell.scala
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.shell/src/main/scala/org/apache/clerezza/shell/ShellFactory.scala
Added:
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.shell/maven-eclipse.xml
URL:
http://svn.apache.org/viewvc/incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.shell/maven-eclipse.xml?rev=1032781&view=auto
==============================================================================
---
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.shell/maven-eclipse.xml
(added)
+++
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.shell/maven-eclipse.xml
Mon Nov 8 23:03:50 2010
@@ -0,0 +1,8 @@
+<project default="copy-resources">
+ <target name="init"/>
+ <target name="copy-resources" depends="init">
+ <copy todir="target/classes/META-INF" filtering="false">
+ <fileset dir="." includes="NOTICE.txt|LICENSE.*" excludes="**/*.java"/>
+ </copy>
+ </target>
+</project>
\ No newline at end of file
Added:
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.shell/src/main/scala/org/apache/clerezza/shell/OsgiDsl.scala
URL:
http://svn.apache.org/viewvc/incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.shell/src/main/scala/org/apache/clerezza/shell/OsgiDsl.scala?rev=1032781&view=auto
==============================================================================
---
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.shell/src/main/scala/org/apache/clerezza/shell/OsgiDsl.scala
(added)
+++
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.shell/src/main/scala/org/apache/clerezza/shell/OsgiDsl.scala
Mon Nov 8 23:03:50 2010
@@ -0,0 +1,41 @@
+/*
+ * 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 org.osgi.service.component.ComponentContext
+
+class OsgiDsl(context: ComponentContext) {
+
+ val bundleContext = context.getBundleContext
+
+ def ps = {
+ for (b <- bundleContext.getBundles) { println(b.getBundleId+" -
"+b.getSymbolicName+" "+b.getLocation)}
+ }
+
+ def $[T](implicit m: Manifest[T]): T = {
+ getService(m.erasure.asInstanceOf[Class[T]])
+ }
+
+ private def getService[T](clazz : Class[T]) : T= {
+ val serviceReference =
bundleContext.getServiceReference(clazz.getName)
+ if (serviceReference != null) {
+
bundleContext.getService(serviceReference).asInstanceOf[T]
+ } else null.asInstanceOf[T]
+ }
+}
Modified:
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.shell/src/main/scala/org/apache/clerezza/shell/Shell.scala
URL:
http://svn.apache.org/viewvc/incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.shell/src/main/scala/org/apache/clerezza/shell/Shell.scala?rev=1032781&r1=1032780&r2=1032781&view=diff
==============================================================================
---
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.shell/src/main/scala/org/apache/clerezza/shell/Shell.scala
(original)
+++
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.shell/src/main/scala/org/apache/clerezza/shell/Shell.scala
Mon Nov 8 23:03:50 2010
@@ -62,21 +62,41 @@ class Shell(factory: InterpreterFactory,
private var bundleContext: BundleContext = null
private var bindings = Set[(String, String, Any)]()
+ private var imports = Set[String]()
val interpreterLoop = new InterpreterLoop(new BufferedReader(new
InputStreamReader(System.in)), new PrintWriter(System.out, true)) {
override def createInterpreter() {
+ println("creating interpreter")
interpreter = factory.createInterpreter(out)
- interpreter.interpret("import org.apache.clerezza._")
- interpreter.interpret("val a = 33")
- interpreter.interpret("println(\"enjoy!\")")
+ println("binding bindings")
for (binding <- bindings) {
interpreter.bind(binding._1, binding._2,
binding._3)
}
+ println("adding imports")
+ for (v <- imports) {
+ interpreter.interpret("import "+v)
+ }
}
override val prompt = "zz>"
+ override val standardCommands: List[Command] = {
+ import CommandImplicits._
+ List(
+ NoArgs("help", "print this help message", printHelp),
+ VarArgs("history", "show the history (optional arg:
lines to show)", printHistory),
+ LineArg("h?", "search the history", searchHistory),
+ OneArg("load", "load and interpret a Scala file",
load),
+ NoArgs("power", "enable power user mode", power),
+ NoArgs("quit", "exit the interpreter", () =>
Result(false, None)),
+ NoArgs("replay", "reset execution and replay all
previous commands", replay),
+ LineArg("sh", "fork a shell and run a command",
runShellCmd),
+ LineArg("felix", "execute a felix shell command",
runShellCmd),
+ NoArgs("silent", "disable/enable automatic printing
of results", verbosity)
+ )
+ }
+
override def main(settings: Settings) {
this.settings = settings
createInterpreter()
@@ -146,6 +166,10 @@ class Shell(factory: InterpreterFactory,
bindings += ((name, boundType, value))
}
+ def addImport(importValue: String) {
+ imports += importValue
+ }
+
}
\ No newline at end of file
Modified:
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.shell/src/main/scala/org/apache/clerezza/shell/ShellFactory.scala
URL:
http://svn.apache.org/viewvc/incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.shell/src/main/scala/org/apache/clerezza/shell/ShellFactory.scala?rev=1032781&r1=1032780&r2=1032781&view=diff
==============================================================================
---
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.shell/src/main/scala/org/apache/clerezza/shell/ShellFactory.scala
(original)
+++
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.shell/src/main/scala/org/apache/clerezza/shell/ShellFactory.scala
Mon Nov 8 23:03:50 2010
@@ -32,19 +32,23 @@ class ShellFactory() {
var factory: InterpreterFactory = null
- var bundleContext: BundleContext = null
+ var componentContext: ComponentContext = null
def activate(componentContext: ComponentContext)= {
- bundleContext = componentContext.getBundleContext
+ this.componentContext = componentContext
}
def deactivate(componentContext: ComponentContext) = {
- bundleContext = componentContext.getBundleContext
+ this.componentContext = componentContext
}
def createShell() = {
val shell = new Shell(factory, System.in, new
OutputStreamWriter(System.out))
- shell.bind("bundleContext", classOf[BundleContext].getName,
bundleContext)
+ //shell.bind("bundleContext", classOf[BundleContext].getName,
componentContext.getBundleContext)
+ //shell.bind("componentContext",
classOf[ComponentContext].getName, componentContext)
+ shell.bind("osgiDsl", classOf[OsgiDsl].getName, new
OsgiDsl(componentContext))
+ shell.addImport("org.apache.clerezza._")
+ shell.addImport("osgiDsl._")
shell
}