From eddc8cb2dd1b8d0735bcae0e71d9e1da45882400 Mon Sep 17 00:00:00 2001 From: felmer <felmer> Date: Tue, 17 Aug 2010 07:42:07 +0000 Subject: [PATCH] SE-292 improve and extend admin console SVN: 17471 --- .../generic/client/console/AdminConsole.java | 29 +++---- .../openbis/generic/client/console/Lexer.java | 4 +- .../client/console/RegisterDataSetType.java | 80 ++++++++++++++++++- .../generic/client/console/ScriptContext.java | 11 +++ .../generic/client/console/LexerTest.java | 4 +- 5 files changed, 106 insertions(+), 22 deletions(-) diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/console/AdminConsole.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/console/AdminConsole.java index d2dc9a1b80c..4d555c4eded 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/console/AdminConsole.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/console/AdminConsole.java @@ -25,9 +25,9 @@ import java.util.Map; import jline.ConsoleReader; import ch.systemsx.cisd.common.exceptions.EnvironmentFailureException; -import ch.systemsx.cisd.common.exceptions.UserFailureException; import ch.systemsx.cisd.common.filesystem.FileUtilities; import ch.systemsx.cisd.common.spring.HttpInvokerUtils; +import ch.systemsx.cisd.common.utilities.ExtendedProperties; import ch.systemsx.cisd.openbis.generic.shared.ICommonServer; import ch.systemsx.cisd.openbis.generic.shared.dto.SessionContextDTO; @@ -73,7 +73,7 @@ public class AdminConsole Map<String, ICommand> commands = createCommands(); String sessionToken = session.getSessionToken(); List<String> lines = FileUtilities.loadToStringList(new File(script)); - ScriptContext context = new ScriptContext(); + ScriptContext context = new ScriptContext(ExtendedProperties.getSubset(System.getProperties(), "openbis.", true)); for (int i = 0; i < lines.size(); i++) { String line = lines.get(i).trim(); @@ -86,14 +86,16 @@ public class AdminConsole ICommand cmd = commands.get(command); if (cmd == null) { - throw createException(i, line, "Unknown command: " + command); - } - try - { - cmd.execute(service, sessionToken, context, argument); - } catch (RuntimeException ex) + printError(i, line, "Unknown command: " + command); + } else { - throw createException(i, line, ex); + try + { + cmd.execute(service, sessionToken, context, argument); + } catch (RuntimeException ex) + { + printError(i, line, ex); + } } } } @@ -101,16 +103,11 @@ public class AdminConsole } } - private static UserFailureException createException(int lineIndex, String line, Object reason) + private static void printError(int lineIndex, String line, Object reason) { String message = "Error in line " + (lineIndex + 1) + " [" + line + "]\nReason: " + reason; - if (reason instanceof Throwable) - { - Throwable throwable = (Throwable) reason; - return new UserFailureException(message, throwable); - } - return new UserFailureException(message); + System.err.println(message); } private static ConsoleReader getConsoleReader() diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/console/Lexer.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/console/Lexer.java index 890b5f76fde..fbe3300d090 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/console/Lexer.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/console/Lexer.java @@ -81,7 +81,6 @@ class Lexer } if (character == '\"') { - context.finishToken(); return IN_QUOTED_TOKEN; } context.addCharacter(character); @@ -95,8 +94,7 @@ class Lexer { if (character == '\"') { - context.finishToken(); - return BETWEEN_TOKENS; + return IN_TOKEN; } context.addCharacter(character); return this; diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/console/RegisterDataSetType.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/console/RegisterDataSetType.java index 3f197f892da..49635c60094 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/console/RegisterDataSetType.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/console/RegisterDataSetType.java @@ -16,6 +16,10 @@ package ch.systemsx.cisd.openbis.generic.client.console; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + import ch.systemsx.cisd.openbis.generic.shared.ICommonServer; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataSetType; @@ -26,10 +30,84 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataSetType; */ class RegisterDataSetType implements ICommand { + private static interface AttributeSetter<T> + { + public String getAttributeName(); + public void setAttributeFor(T object, String value); + } + + private enum DataSetTypeAttributeSetter implements AttributeSetter<DataSetType> + { + DESCRIPTION("description") + { + public void setAttributeFor(DataSetType type, String value) + { + type.setDescription(value); + + } + }, + PATTERN("main-pattern") + { + public void setAttributeFor(DataSetType type, String value) + { + type.setMainDataSetPattern(value); + + } + }, + PATH("main-path") + { + public void setAttributeFor(DataSetType type, String value) + { + type.setMainDataSetPath(value); + + } + }; + + private final String attributeName; + private DataSetTypeAttributeSetter(String attributeName) + { + this.attributeName = attributeName; + } + + public String getAttributeName() + { + return attributeName; + } + } + + private final Map<String, AttributeSetter<DataSetType>> attributeSetters = + new HashMap<String, AttributeSetter<DataSetType>>(); + + RegisterDataSetType() + { + for (DataSetTypeAttributeSetter attributeSetter : DataSetTypeAttributeSetter.values()) + { + attributeSetters.put(attributeSetter.getAttributeName(), attributeSetter); + } + } public void execute(ICommonServer server, String sessionToken, ScriptContext context, String argument) { - server.registerDataSetType(sessionToken, new DataSetType(argument)); + List<String> tokens = Lexer.extractTokens(argument); + DataSetType dataSetType = new DataSetType(tokens.get(0)); + for (int i = 1; i < tokens.size(); i++) + { + String token = tokens.get(i); + int indexOfEqualSign = token.indexOf('='); + if (indexOfEqualSign < 0) + { + throw new IllegalArgumentException("Missing '=': " + token); + } + String key = token.substring(0, indexOfEqualSign); + String value = token.substring(indexOfEqualSign + 1); + AttributeSetter<DataSetType> attributeSetter = attributeSetters.get(key); + if (attributeSetter == null) + { + throw new IllegalArgumentException("Unknown attribute '" + key + "': " + token); + } + attributeSetter.setAttributeFor(dataSetType, value); + } + server.registerDataSetType(sessionToken, dataSetType); } } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/console/ScriptContext.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/console/ScriptContext.java index a33cd99c854..c08dc92da4b 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/console/ScriptContext.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/console/ScriptContext.java @@ -18,7 +18,9 @@ package ch.systemsx.cisd.openbis.generic.client.console; import java.util.HashMap; import java.util.Map; +import java.util.Properties; import java.util.Set; +import java.util.Map.Entry; import ch.systemsx.cisd.common.utilities.Template; @@ -31,6 +33,15 @@ class ScriptContext { private final Map<String, String> bindings = new HashMap<String, String>(); + ScriptContext(Properties properties) + { + Set<Entry<Object, Object>> entrySet = properties.entrySet(); + for (Entry<Object, Object> entry : entrySet) + { + bind((String) entry.getKey(), (String) entry.getValue()); + } + } + void bind(String variable, String value) { bindings.put(variable, value); diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/console/LexerTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/console/LexerTest.java index 65e7b5e14b9..a97d765ffe6 100644 --- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/console/LexerTest.java +++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/console/LexerTest.java @@ -38,8 +38,8 @@ public class LexerTest extends AssertJUnit check("[alpha]", " alpha\t "); check("[a, b, hello world]", "a b \"hello world\""); check("[a, b, hello \t world ]", " a\tb \"hello \t world \" "); - check("[a, b, hello 'world']", "a b\"hello 'world'\""); - check("[a, b]", "\"a\"\"b\""); + check("[a, b, hello 'world']", "a b \"hello 'world'\""); + check("[a=hello world]", "a=\"hello world\""); } private void check(String expectedTokens, String input) -- GitLab