From 3bb0aefa38c27221114a2db749d2eaa1a9df0336 Mon Sep 17 00:00:00 2001 From: Andrew Branson Date: Mon, 15 Sep 2014 11:41:39 +0200 Subject: Add trim calls to ObjectProperties.getString() to discard any extra whitespace around the values. Fixes #165 Remove old Gateway.getProperty methods - there should be no deprecated methods in the 3.0 release Move all getProperty() calls to getString or other so they will be trimmed. Introduce ObjectProperties.getInstances to create ArrayLists of objects from comma-separated class name lists. --- src/main/java/com/c2kernel/entity/agent/Job.java | 17 ++++----- src/main/java/com/c2kernel/lookup/RolePath.java | 2 +- .../c2kernel/persistency/XMLClusterStorage.java | 2 +- src/main/java/com/c2kernel/process/Bootstrap.java | 34 ++++++++---------- .../java/com/c2kernel/process/ClientShell.java | 4 +-- src/main/java/com/c2kernel/process/Gateway.java | 21 ++---------- .../java/com/c2kernel/process/UserCodeProcess.java | 2 +- .../com/c2kernel/process/module/ModuleManager.java | 5 ++- .../java/com/c2kernel/scripting/ScriptConsole.java | 4 +-- .../java/com/c2kernel/utils/ObjectProperties.java | 40 +++++++++++++++++++--- 10 files changed, 69 insertions(+), 62 deletions(-) diff --git a/src/main/java/com/c2kernel/entity/agent/Job.java b/src/main/java/com/c2kernel/entity/agent/Job.java index fe2084d..13bd268 100644 --- a/src/main/java/com/c2kernel/entity/agent/Job.java +++ b/src/main/java/com/c2kernel/entity/agent/Job.java @@ -349,15 +349,16 @@ public class Job implements C2KLocalObject synchronized (ocInitCache) { ocInit = ocInitCache.get(ocPropName); if (ocInit == null) { - Object ocInitObj = Gateway.getProperties().get(ocPropName); - if (ocInitObj instanceof String) { - try { - ocInitObj = Class.forName((String)ocInitObj).newInstance(); - } catch (Exception e) { - Logger.error(e); - throw new InvalidDataException("Could not instantiate OutcomeInstantiator "+ocInitObj+" for "+ocPropName); - } + Object ocInitObj; + if (!Gateway.getProperties().containsKey(ocPropName)) { + throw new InvalidDataException("Outcome instantiator "+ocPropName+" isn't defined", ""); } + try { + ocInitObj = Gateway.getProperties().getInstance(ocPropName); + } catch (Exception e) { + Logger.error(e); + throw new InvalidDataException("Outcome instantiator "+ocPropName+" couldn't be instantiated", ""); + } ocInit = (OutcomeInitiator)ocInitObj; // throw runtime class cast if it isn't one ocInitCache.put(ocPropName, ocInit); } diff --git a/src/main/java/com/c2kernel/lookup/RolePath.java b/src/main/java/com/c2kernel/lookup/RolePath.java index fa37fb3..9f9c597 100644 --- a/src/main/java/com/c2kernel/lookup/RolePath.java +++ b/src/main/java/com/c2kernel/lookup/RolePath.java @@ -61,7 +61,7 @@ public class RolePath extends DomainPath @Override - public void checkType() { + protected void checkType() { mType = CONTEXT; } diff --git a/src/main/java/com/c2kernel/persistency/XMLClusterStorage.java b/src/main/java/com/c2kernel/persistency/XMLClusterStorage.java index 8f01d8e..d3ee503 100644 --- a/src/main/java/com/c2kernel/persistency/XMLClusterStorage.java +++ b/src/main/java/com/c2kernel/persistency/XMLClusterStorage.java @@ -19,7 +19,7 @@ public class XMLClusterStorage extends ClusterStorage { @Override public void open(Authenticator auth) throws ClusterStorageException { - String rootProp = Gateway.getProperties().getProperty("XMLStorage.root"); + String rootProp = Gateway.getProperties().getString("XMLStorage.root"); if (rootProp == null) throw new ClusterStorageException("XMLClusterStorage.open() - Root path not given in config file."); diff --git a/src/main/java/com/c2kernel/process/Bootstrap.java b/src/main/java/com/c2kernel/process/Bootstrap.java index 3b61ad3..0f06616 100644 --- a/src/main/java/com/c2kernel/process/Bootstrap.java +++ b/src/main/java/com/c2kernel/process/Bootstrap.java @@ -224,21 +224,17 @@ public class Bootstrap private static ResourceImportHandler getHandler(String resType) throws Exception { if (resHandlerCache.containsKey(resType)) return resHandlerCache.get(resType); - ResourceImportHandler handler; - Object handlerProp = Gateway.getProperties().get("ResourceImportHandler."+resType); - if (handlerProp instanceof ResourceImportHandler) - handler = (ResourceImportHandler)handlerProp; - else if (handlerProp instanceof String) { //class name + ResourceImportHandler handler = null; + if (Gateway.getProperties().containsKey("ResourceImportHandler."+resType)) { try { - Class handlerClass = Class.forName((String)handlerProp); - handler = (ResourceImportHandler) handlerClass.newInstance(); - } catch (ClassNotFoundException e) { - throw new Exception("Handler class "+handlerProp+" for importing "+resType+" resources not found"); - } catch (ClassCastException e) { - throw new Exception(handlerProp+" for importing "+resType+" was not a ResourceImportHandler"); - } + handler = (ResourceImportHandler) Gateway.getProperties().getInstance("ResourceImportHandler."+resType); + } catch (Exception ex) { + Logger.error(ex); + Logger.error("Exception loading ResourceHandler for "+resType+". Using default."); + } } - else + + if (handler == null) handler = new DefaultResourceImportHandler(resType); resHandlerCache.put(resType, handler); @@ -327,7 +323,7 @@ public class Bootstrap */ public static void checkAdminAgents() throws Exception { // check for administrative user - String adminPassword = Gateway.getProperties().getProperty("AdminPassword", "admin12345"); + String adminPassword = Gateway.getProperties().getString("AdminPassword", "admin12345"); // check for import user checkAgent("system", adminPassword, "Admin", new UUID(0, 0), false); @@ -340,7 +336,7 @@ public class Bootstrap public static void createServerItem() throws Exception { LookupManager lookupManager = Gateway.getLookupManager(); - String serverName = Gateway.getProperties().getProperty("ItemServer.name"); + String serverName = Gateway.getProperties().getString("ItemServer.name", InetAddress.getLocalHost().getHostName()); thisServerPath = new DomainPath("/servers/"+serverName); ItemPath serverEntity; try { @@ -356,12 +352,12 @@ public class Bootstrap Gateway.getStorage().put(serverEntity, new Property("Name", serverName, false), null); Gateway.getStorage().put(serverEntity, new Property("Type", "Server", false), null); Gateway.getStorage().put(serverEntity, new Property("KernelVersion", Gateway.getKernelVersion(), true), null); - if (Gateway.getProperties().getProperty("ItemServer.Proxy.port") != null) - Gateway.getStorage().put(serverEntity, - new Property("ProxyPort", Gateway.getProperties().getProperty("ItemServer.Proxy.port"), false), null); + int proxyPort = Gateway.getProperties().getInt("ItemServer.Proxy.port", 1553); + Gateway.getStorage().put(serverEntity, + new Property("ProxyPort", String.valueOf(proxyPort), false), null); Gateway.getStorage().put(serverEntity, new Property("ConsolePort", String.valueOf(Logger.getConsolePort()), true), null); - Gateway.getProxyManager().connectToProxyServer(Gateway.getProperties().getProperty("ItemServer.name"), Gateway.getProperties().getInt("ItemServer.Proxy.port")); + Gateway.getProxyManager().connectToProxyServer(serverName, proxyPort); } diff --git a/src/main/java/com/c2kernel/process/ClientShell.java b/src/main/java/com/c2kernel/process/ClientShell.java index eeeb07f..d97a3de 100644 --- a/src/main/java/com/c2kernel/process/ClientShell.java +++ b/src/main/java/com/c2kernel/process/ClientShell.java @@ -41,9 +41,7 @@ public class ClientShell extends StandardClient { public static void main(String[] args) throws Exception { Gateway.init(readC2KArgs(args)); - String authClassName = Gateway.getProperties().getProperty("cli.auth"); - Class authClass = Gateway.getResource().getClassForName(authClassName); - ProxyLogin auth = (ProxyLogin)authClass.newInstance(); + ProxyLogin auth = (ProxyLogin)Gateway.getProperties().getInstance("cli.auth"); AgentProxy user = auth.authenticate(Gateway.getProperties().getProperty("Name")); ClientShell shell = new ClientShell(user); shell.run(); diff --git a/src/main/java/com/c2kernel/process/Gateway.java b/src/main/java/com/c2kernel/process/Gateway.java index c2dd646..2de2b99 100644 --- a/src/main/java/com/c2kernel/process/Gateway.java +++ b/src/main/java/com/c2kernel/process/Gateway.java @@ -135,7 +135,7 @@ public class Gateway dumpC2KProps(7); //Initialise language file - String languageFile = getProperty("language.file"); + String languageFile = getProperties().getString("language.file"); if (languageFile != null && languageFile.length() > 0) { Language.isTranlated=true; Language.mTableOfTranslation = FileStringUtility.loadLanguageFile(languageFile); @@ -376,24 +376,7 @@ public class Gateway } static public String getCentreId() { - return getProperty("LocalCentre"); - } - - @Deprecated - static public String getProperty(String propName) { - return getProperty(propName, null); - } - - @Deprecated - static public String getProperty(String propName, String defaultValue) { - if (mC2KProps == null) return defaultValue; - return mC2KProps.getProperty(propName, defaultValue); - } - - @Deprecated - static public void setProperty(String propName, String propValue) { - if (mC2KProps == null) return; - mC2KProps.put(propName, propValue); + return getProperties().getString("LocalCentre"); } static public Enumeration propertyNames() { diff --git a/src/main/java/com/c2kernel/process/UserCodeProcess.java b/src/main/java/com/c2kernel/process/UserCodeProcess.java index 6b34bf5..cb8ca74 100644 --- a/src/main/java/com/c2kernel/process/UserCodeProcess.java +++ b/src/main/java/com/c2kernel/process/UserCodeProcess.java @@ -209,7 +209,7 @@ public class UserCodeProcess extends StandardClient implements ProxyObserver e = propertyNames(); e.hasMoreElements();) { String name = (String) e.nextElement(); - Logger.msg(" "+name+" ("+getObject(name).getClass().getSimpleName()+"): "+getObject(name).toString()); + Object value = getObject(name); + if (value == null) + Logger.msg(" "+name+": null"); + else + Logger.msg(" "+name+" ("+getObject(name).getClass().getSimpleName()+"): '"+getObject(name).toString()+"'"); } } @@ -154,12 +162,34 @@ public class ObjectProperties extends Properties { if (prop == null || prop.equals("")) throw new InstantiationException("Property '"+propName+"' was not defined. Cannot instantiate."); if (prop instanceof String) - return Class.forName((String)prop).newInstance(); + return Class.forName(((String)prop).trim()).newInstance(); return prop; } public Object getInstance(String propName) throws InstantiationException, IllegalAccessException, ClassNotFoundException { return getInstance(propName, null); } - + + public ArrayList getInstances(String propName, Object defaultVal) throws InstantiationException, IllegalAccessException, ClassNotFoundException { + Object val = getObject(propName, defaultVal); + if (val == null) return null; + if (val instanceof ArrayList) + return (ArrayList)val; + else if (val instanceof String) { + ArrayList retArr = new ArrayList(); + StringTokenizer tok = new StringTokenizer((String)val, ","); + while (tok.hasMoreTokens()) + retArr.add(getInstance(tok.nextToken())); + return retArr; + } + else { + ArrayList retArr = new ArrayList(); + retArr.add(val); + return retArr; + } + } + + public ArrayList getInstances(String propName) throws InstantiationException, IllegalAccessException, ClassNotFoundException { + return getInstances(propName, null); + } } -- cgit v1.2.3