]> git.argeo.org Git - gpl/argeo-slc.git/blobdiff - runtime/org.argeo.slc.akb/src/main/java/org/argeo/slc/akb/core/AkbServiceImpl.java
work on active environments
[gpl/argeo-slc.git] / runtime / org.argeo.slc.akb / src / main / java / org / argeo / slc / akb / core / AkbServiceImpl.java
index 0bb86c103e08c4f3162b97471acb2d1a7cbf21a2..83de7294c8b96b0c8d7cdc49d92dcd87d8460a5b 100644 (file)
@@ -112,20 +112,67 @@ 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);
 
-               Node connectorParent = newTemplate.addNode(
-                               AkbTypes.AKB_CONNECTOR_FOLDER, AkbTypes.AKB_CONNECTOR_FOLDER);
-               connectorParent.setProperty(Property.JCR_TITLE, connectorParentName);
+               // Node connectorParent =
+               newTemplate.addNode(AkbTypes.AKB_CONNECTOR_FOLDER,
+                               AkbTypes.AKB_CONNECTOR_FOLDER);
+               // connectorParent.setProperty(Property.JCR_TITLE, connectorParentName);
 
                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 = createdEnv.addNode(
+                               AkbTypes.AKB_CONNECTOR_FOLDER, AkbTypes.AKB_CONNECTOR_FOLDER);
+
+               NodeIterator ni = template.getNode(AkbTypes.AKB_CONNECTOR_FOLDER)
+                               .getNodes();
+               while (ni.hasNext()) {
+                       Node currNode = ni.nextNode();
+                       if (currNode.isNodeType(AkbTypes.AKB_CONNECTOR_ALIAS)) {
+                               Node newConnector = connectorParent.addNode(currNode.getName(),
+                                               AkbTypes.AKB_CONNECTOR);
+                               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 +186,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 +232,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 +247,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 +264,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 +337,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 +385,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 +451,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 +523,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) {