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=bd79ace0f42a893c5f5b13aecbccf2880ae23522;hpb=65c1e73020652f7b70110268de6cc2c89624a9c2;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 bd79ace0f..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 @@ -35,6 +35,7 @@ import org.argeo.slc.akb.AkbException; import org.argeo.slc.akb.AkbNames; import org.argeo.slc.akb.AkbService; import org.argeo.slc.akb.AkbTypes; +import org.argeo.slc.akb.utils.AkbJcrUtils; import org.argeo.slc.jsch.SimpleUserInfo; import org.argeo.util.security.Keyring; @@ -111,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 { - Node connectorParent = newTemplate.addNode( + 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 = 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, @@ -138,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; } @@ -183,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(); @@ -198,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; @@ -215,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); } } @@ -280,23 +332,28 @@ public class AkbServiceImpl implements AkbService, AkbNames { public PreparedStatement prepareJdbcQuery(Node activeEnv, Node node) { PreparedStatement statement = null; try { - + if (node.isNodeType(AkbTypes.AKB_JDBC_QUERY)) { - String connectorPath = node.getProperty(AKB_USED_CONNECTOR) + String connectorAliasStr = node.getProperty(AKB_USED_CONNECTOR) .getString(); - Node connectorNode = node.getSession().getNode(connectorPath); - - if (activeEnv != null){ - String aliasName = connectorNode.getProperty(Property.JCR_TITLE).getString(); - connectorNode = getConnectorByAlias(activeEnv, aliasName); + // in case of a template passed env can be null + if (activeEnv == null) { + activeEnv = AkbJcrUtils.getCurrentTemplate(node); } + 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() + '/' @@ -324,16 +381,28 @@ public class AkbServiceImpl implements AkbService, AkbNames { public String executeCommand(Node activeEnv, Node node) { try { - String command = node.getProperty(AkbNames.AKB_COMMAND_TEXT) - .getString(); - String connectorPath = node.getProperty(AKB_USED_CONNECTOR) + String connectorAliasStr = node.getProperty(AKB_USED_CONNECTOR) .getString(); - Node connectorNode = node.getSession().getNode(connectorPath); - String connectorUrl = connectorNode.getProperty(AKB_CONNECTOR_URL) + // in case of a template passed env can be null + if (activeEnv == null) { + activeEnv = AkbJcrUtils.getCurrentTemplate(node); + } + Node connectorNode = getActiveConnectorByAlias(activeEnv, + connectorAliasStr); + String command = node.getProperty(AkbNames.AKB_COMMAND_TEXT) .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); @@ -379,14 +448,26 @@ public class AkbServiceImpl implements AkbService, AkbNames { .getString(); String command = "cat " + filePath; - // TODO do a proper scp - String connectorPath = node.getProperty(AKB_USED_CONNECTOR) - .getString(); - Node connectorNode = node.getSession().getNode(connectorPath); - String connectorUrl = connectorNode.getProperty(AKB_CONNECTOR_URL) + String connectorAliasStr = node.getProperty(AKB_USED_CONNECTOR) .getString(); - String connectorUser = connectorNode - .getProperty(AKB_CONNECTOR_USER).getString(); + // in case of a template passed env can be null + if (activeEnv == null) { + activeEnv = AkbJcrUtils.getCurrentTemplate(node); + } + Node connectorNode = getActiveConnectorByAlias(activeEnv, + connectorAliasStr); + + // TODO do a proper scp + 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); @@ -445,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) {