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;
@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,
// 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;
}
}
@Override
- public Node getConnectorByAlias(Node envNode, String aliasName)
+ public Node getActiveConnectorByAlias(Node envNode, String aliasPath)
throws RepositoryException {
try {
Session session = envNode.getSession();
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;
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);
}
}
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() + '/'
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);
.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);
}
- // /** Expose injected repository */
- // public Repository getRepository() {
- // return repository;
- // }
+ /** Expose injected repository */
+ public Repository getRepository() {
+ return repository;
+ }
/* DEPENDENCY INJECTION */
public void setRepository(Repository repository) {