X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;f=runtime%2Forg.argeo.slc.akb%2Fsrc%2Fmain%2Fjava%2Forg%2Fargeo%2Fslc%2Fakb%2Fcore%2FAkbServiceImpl.java;h=df24ef108fc427f3a24cf7f6c95ea029956d3ee7;hb=1a0e1b439c58df2f39495ed756df06ca00e384e1;hp=0bb86c103e08c4f3162b97471acb2d1a7cbf21a2;hpb=b331d1e6936fc825ee2565f423e7e249dbecb687;p=gpl%2Fargeo-slc.git diff --git a/runtime/org.argeo.slc.akb/src/main/java/org/argeo/slc/akb/core/AkbServiceImpl.java b/runtime/org.argeo.slc.akb/src/main/java/org/argeo/slc/akb/core/AkbServiceImpl.java index 0bb86c103..df24ef108 100644 --- a/runtime/org.argeo.slc.akb/src/main/java/org/argeo/slc/akb/core/AkbServiceImpl.java +++ b/runtime/org.argeo.slc.akb/src/main/java/org/argeo/slc/akb/core/AkbServiceImpl.java @@ -112,20 +112,70 @@ public class AkbServiceImpl implements AkbService, AkbNames { @Override public Node createAkbTemplate(Node parentNode, String name) throws RepositoryException { - String connectorParentName = "Connectors"; - Node newTemplate = parentNode.addNode(name, AkbTypes.AKB_ENV_TEMPLATE); newTemplate.setProperty(Property.JCR_TITLE, name); + newTemplate.addNode(AkbTypes.AKB_CONNECTOR_FOLDER, + AkbTypes.AKB_CONNECTOR_FOLDER); + return newTemplate; + } + + // ////////////////////////// + // ENVIRONMENTS + @Override + public Node createActiveEnv(Node template, String name, + boolean copyDefaultConnectors) throws RepositoryException { + + Session session = template.getSession(); + Node parentEnvNode = session.getNode(AKB_ENVIRONMENTS_BASE_PATH); + Node createdEnv = parentEnvNode.addNode(name, AkbTypes.AKB_ENV); + createdEnv.setProperty(AKB_ENV_TEMPLATE_PATH, template.getPath()); + createdEnv.setProperty(Property.JCR_TITLE, name); - Node connectorParent = newTemplate.addNode( + Node connectorParent = createdEnv.addNode( AkbTypes.AKB_CONNECTOR_FOLDER, AkbTypes.AKB_CONNECTOR_FOLDER); - connectorParent.setProperty(Property.JCR_TITLE, connectorParentName); - return newTemplate; + NodeIterator ni = template.getNode(AkbTypes.AKB_CONNECTOR_FOLDER) + .getNodes(); + activeConns: while (ni.hasNext()) { + Node currNode = ni.nextNode(); + if (currNode.isNodeType(AkbTypes.AKB_CONNECTOR_ALIAS)) { + String connType = currNode.getProperty(AKB_CONNECTOR_TYPE) + .getString(); + + if (AkbJcrUtils.isEmptyString(connType)) + // Cannot create an instance if the type is undefined + continue activeConns; + + Node newConnector = connectorParent.addNode(currNode.getName(), + connType); + newConnector.setProperty(AKB_CONNECTOR_ALIAS_PATH, + currNode.getPath()); + if (copyDefaultConnectors + && currNode + .hasNode(AkbNames.AKB_DEFAULT_TEST_CONNECTOR)) { + Node defaultConn = currNode + .getNode(AkbNames.AKB_DEFAULT_TEST_CONNECTOR); + if (defaultConn.hasProperty(AkbNames.AKB_CONNECTOR_URL)) + newConnector + .setProperty( + AkbNames.AKB_CONNECTOR_URL, + defaultConn.getProperty( + AkbNames.AKB_CONNECTOR_URL) + .getString()); + if (defaultConn.hasProperty(AkbNames.AKB_CONNECTOR_USER)) + newConnector.setProperty( + AkbNames.AKB_CONNECTOR_USER, + defaultConn.getProperty( + AkbNames.AKB_CONNECTOR_USER) + .getString()); + } + } + } + return createdEnv; } // /////////////////////////////////////// - // / CONNECTORS + // CONNECTORS @Override public Node createConnectorAlias(Node templateNode, String name, @@ -139,7 +189,8 @@ public class AkbServiceImpl implements AkbService, AkbNames { // Node defaultConnector = Node defaultConn = newConnector.addNode( AkbNames.AKB_DEFAULT_TEST_CONNECTOR, connectorType); - defaultConn.setProperty(AkbNames.AKB_CONNECTOR_ALIAS_NAME, name); + defaultConn.setProperty(AkbNames.AKB_CONNECTOR_ALIAS_PATH, + newConnector.getPath()); return newConnector; } @@ -184,7 +235,7 @@ public class AkbServiceImpl implements AkbService, AkbNames { } @Override - public Node getConnectorByAlias(Node envNode, String aliasName) + public Node getActiveConnectorByAlias(Node envNode, String aliasPath) throws RepositoryException { try { Session session = envNode.getSession(); @@ -199,10 +250,10 @@ public class AkbServiceImpl implements AkbService, AkbNames { Constraint connType = factory.comparison( factory.propertyValue(source.getSelectorName(), - AkbNames.AKB_CONNECTOR_ALIAS_NAME), + AkbNames.AKB_CONNECTOR_ALIAS_PATH), QueryObjectModelConstants.JCR_OPERATOR_EQUAL_TO, factory .literal(session.getValueFactory().createValue( - aliasName))); + aliasPath))); defaultC = factory.and(defaultC, connType); QueryObjectModel query; @@ -216,13 +267,13 @@ public class AkbServiceImpl implements AkbService, AkbNames { Node connector = ni.nextNode(); if (ni.hasNext()) throw new AkbException("More than one alias with name " - + aliasName + " has been defined for environment " + + aliasPath + " has been defined for environment " + envNode); else return connector; } } catch (RepositoryException e) { - throw new AkbException("Unable to get connector " + aliasName + throw new AkbException("Unable to get connector " + aliasPath + " in " + envNode, e); } } @@ -289,15 +340,20 @@ public class AkbServiceImpl implements AkbService, AkbNames { if (activeEnv == null) { activeEnv = AkbJcrUtils.getCurrentTemplate(node); } - Node connectorNode = getConnectorByAlias(activeEnv, + Node connectorNode = getActiveConnectorByAlias(activeEnv, connectorAliasStr); String sqlQuery = node.getProperty(AKB_QUERY_TEXT).getString(); - String connectorUrl = connectorNode.getProperty( - AKB_CONNECTOR_URL).getString(); - String connectorUser = connectorNode.getProperty( - AKB_CONNECTOR_USER).getString(); + String connectorUrl = AkbJcrUtils.get(connectorNode, + AKB_CONNECTOR_URL); + String connectorUser = AkbJcrUtils.get(connectorNode, + AKB_CONNECTOR_USER); + + // Sanity check + if (AkbJcrUtils.isEmptyString(connectorUrl) + || AkbJcrUtils.isEmptyString(connectorUser)) + return null; String pwdPath = getPasswordPath(connectorNode); // String pwdPath = connectorNode.getPath() + '/' @@ -332,15 +388,21 @@ public class AkbServiceImpl implements AkbService, AkbNames { if (activeEnv == null) { activeEnv = AkbJcrUtils.getCurrentTemplate(node); } - Node connectorNode = getConnectorByAlias(activeEnv, + Node connectorNode = getActiveConnectorByAlias(activeEnv, connectorAliasStr); String command = node.getProperty(AkbNames.AKB_COMMAND_TEXT) .getString(); - String connectorUrl = connectorNode.getProperty(AKB_CONNECTOR_URL) - .getString(); - String connectorUser = connectorNode - .getProperty(AKB_CONNECTOR_USER).getString(); + String connectorUrl = AkbJcrUtils.get(connectorNode, + AKB_CONNECTOR_URL); + String connectorUser = AkbJcrUtils.get(connectorNode, + AKB_CONNECTOR_USER); + + // Sanity check + if (AkbJcrUtils.isEmptyString(connectorUrl) + || AkbJcrUtils.isEmptyString(connectorUser)) + return null; + String pwdPath = getPasswordPath(connectorNode); char[] pwd = keyring.getAsChars(pwdPath); @@ -392,14 +454,20 @@ public class AkbServiceImpl implements AkbService, AkbNames { if (activeEnv == null) { activeEnv = AkbJcrUtils.getCurrentTemplate(node); } - Node connectorNode = getConnectorByAlias(activeEnv, + Node connectorNode = getActiveConnectorByAlias(activeEnv, connectorAliasStr); // TODO do a proper scp - String connectorUrl = connectorNode.getProperty(AKB_CONNECTOR_URL) - .getString(); - String connectorUser = connectorNode - .getProperty(AKB_CONNECTOR_USER).getString(); + String connectorUrl = AkbJcrUtils.get(connectorNode, + AKB_CONNECTOR_URL); + String connectorUser = AkbJcrUtils.get(connectorNode, + AKB_CONNECTOR_USER); + + // Sanity check + if (AkbJcrUtils.isEmptyString(connectorUrl) + || AkbJcrUtils.isEmptyString(connectorUser)) + return null; + String pwdPath = getPasswordPath(connectorNode); char[] pwd = keyring.getAsChars(pwdPath); @@ -458,10 +526,10 @@ public class AkbServiceImpl implements AkbService, AkbNames { } - // /** Expose injected repository */ - // public Repository getRepository() { - // return repository; - // } + /** Expose injected repository */ + public Repository getRepository() { + return repository; + } /* DEPENDENCY INJECTION */ public void setRepository(Repository repository) {