Repository: karaf
Updated Branches:
  refs/heads/master f868947d8 -> ad559c07a


[KARAF-3289] Add a while loop command

Project: http://git-wip-us.apache.org/repos/asf/karaf/repo
Commit: http://git-wip-us.apache.org/repos/asf/karaf/commit/ad559c07
Tree: http://git-wip-us.apache.org/repos/asf/karaf/tree/ad559c07
Diff: http://git-wip-us.apache.org/repos/asf/karaf/diff/ad559c07

Branch: refs/heads/master
Commit: ad559c07a71f83d86fd832ac756c3b316ebac2ac
Parents: f868947
Author: Guillaume Nodet <[email protected]>
Authored: Wed Oct 15 16:01:58 2014 +0200
Committer: Guillaume Nodet <[email protected]>
Committed: Wed Oct 15 16:01:58 2014 +0200

----------------------------------------------------------------------
 .../karaf/shell/commands/impl/IfAction.java     |  5 +-
 .../karaf/shell/commands/impl/WhileAction.java  | 73 ++++++++++++++++++++
 2 files changed, 77 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/karaf/blob/ad559c07/shell/commands/src/main/java/org/apache/karaf/shell/commands/impl/IfAction.java
----------------------------------------------------------------------
diff --git 
a/shell/commands/src/main/java/org/apache/karaf/shell/commands/impl/IfAction.java
 
b/shell/commands/src/main/java/org/apache/karaf/shell/commands/impl/IfAction.java
index b7d4585..3c1362f 100644
--- 
a/shell/commands/src/main/java/org/apache/karaf/shell/commands/impl/IfAction.java
+++ 
b/shell/commands/src/main/java/org/apache/karaf/shell/commands/impl/IfAction.java
@@ -63,8 +63,11 @@ public class IfAction implements Action {
         if (result instanceof String && ((String) result).equals("")) {
             return false;
         }
+        if (result instanceof Number) {
+            return ((Number) result).doubleValue() != 0.0d;
+        }
         if (result instanceof Boolean) {
-            return ((Boolean) result).booleanValue();
+            return (Boolean) result;
         }
         return true;
     }

http://git-wip-us.apache.org/repos/asf/karaf/blob/ad559c07/shell/commands/src/main/java/org/apache/karaf/shell/commands/impl/WhileAction.java
----------------------------------------------------------------------
diff --git 
a/shell/commands/src/main/java/org/apache/karaf/shell/commands/impl/WhileAction.java
 
b/shell/commands/src/main/java/org/apache/karaf/shell/commands/impl/WhileAction.java
new file mode 100644
index 0000000..90b17a6
--- /dev/null
+++ 
b/shell/commands/src/main/java/org/apache/karaf/shell/commands/impl/WhileAction.java
@@ -0,0 +1,73 @@
+/*
+ * 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.karaf.shell.commands.impl;
+
+import java.util.Collection;
+import java.util.Collections;
+
+import org.apache.karaf.shell.api.action.Action;
+import org.apache.karaf.shell.api.action.Argument;
+import org.apache.karaf.shell.api.action.Command;
+import org.apache.karaf.shell.api.action.lifecycle.Reference;
+import org.apache.karaf.shell.api.action.lifecycle.Service;
+import org.apache.karaf.shell.api.console.Function;
+import org.apache.karaf.shell.api.console.Session;
+
+/**
+ * Execute a closure on a list of arguments.
+ */
+@Command(scope = "shell", name = "while", description = "Loop while the 
condition is true.")
+@Service
+public class WhileAction implements Action {
+
+    @Argument(name = "condition", index = 0, multiValued = false, required = 
true, description = "The condition of the loop")
+    Function condition;
+
+    @Argument(name = "function", index = 1, multiValued = false, required = 
true, description = "The function to execute")
+    Function function;
+
+    @Reference
+    Session session;
+
+    @Override
+    public Object execute() throws Exception {
+        while (isTrue(condition.execute(session, null))) {
+            function.execute(session, null);
+            if (Thread.currentThread().isInterrupted()) {
+                throw new InterruptedException();
+            }
+        }
+        return null;
+    }
+
+    private boolean isTrue(Object result) {
+        if (result == null) {
+            return false;
+        }
+        if (result instanceof String && ((String) result).equals("")) {
+            return false;
+        }
+        if (result instanceof Number) {
+            return ((Number) result).doubleValue() != 0.0d;
+        }
+        if (result instanceof Boolean) {
+            return (Boolean) result;
+        }
+        return true;
+    }
+
+}

Reply via email to