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; + } + +}
