From fbfd8130f004567f3e768651e32ee55c2dd6a321 Mon Sep 17 00:00:00 2001 From: Aron Roberts Date: Thu, 6 Mar 2014 17:19:34 -0800 Subject: [PATCH] CSPACE-6329: Modify only selected values in each Nuxeo per-repo config file; others will be inserted via an Ant filter during a deploy. (The latter isn't yet working.) --- 3rdparty/nuxeo/build.xml | 18 +++++------ .../5.5-HF07/config/proto-repo-config.xml | 13 ++++++-- .../services/common/ServiceMain.java | 32 ++++++++++++------- .../services/common/XmlTools.java | 29 ++++++++++++++++- 4 files changed, 67 insertions(+), 25 deletions(-) diff --git a/3rdparty/nuxeo/build.xml b/3rdparty/nuxeo/build.xml index 3ec8b9073..b9598a2ae 100644 --- a/3rdparty/nuxeo/build.xml +++ b/3rdparty/nuxeo/build.xml @@ -121,21 +121,21 @@ - - + + + - - - + + + + + - + - - + + + - @XA_DATASOURCE@ + @XA_DATASOURCE@ + + @DB_URL@ - @DB_SERVER_HOSTNAME@ - nuxeo + @DB_SERVER_HOSTNAME@ + + @NUXEO_USER@ @NUXEO_PW@ diff --git a/services/common/src/main/java/org/collectionspace/services/common/ServiceMain.java b/services/common/src/main/java/org/collectionspace/services/common/ServiceMain.java index 80e7d7698..df55e4f66 100644 --- a/services/common/src/main/java/org/collectionspace/services/common/ServiceMain.java +++ b/services/common/src/main/java/org/collectionspace/services/common/ServiceMain.java @@ -17,6 +17,7 @@ import java.util.*; import javax.servlet.ServletContext; import javax.sql.DataSource; +import org.apache.tomcat.dbcp.dbcp.BasicDataSource; import org.collectionspace.authentication.AuthN; import org.collectionspace.services.common.api.JEEServerDeployment; import org.collectionspace.services.common.api.Tools; @@ -822,25 +823,32 @@ public class ServiceMain { REPOSITORY_EXTENSION_POINT_XPATH + "/repository", "name", repositoryName); repoConfigDoc = XmlTools.setAttributeValue(repoConfigDoc, REPOSITORY_EXTENSION_POINT_XPATH + "/repository/repository", "name", repositoryName); - repoConfigDoc = XmlTools.setElementValue(repoConfigDoc, - REPOSITORY_EXTENSION_POINT_XPATH + "/repository/repository/xa-datasource", PLACEHOLDER); - repoConfigDoc = XmlTools.setElementValue(repoConfigDoc, - REPOSITORY_EXTENSION_POINT_XPATH + "/repository/repository/property[@name='URL']", PLACEHOLDER); - repoConfigDoc = XmlTools.setElementValue(repoConfigDoc, - REPOSITORY_EXTENSION_POINT_XPATH + "/repository/repository/property[@name='ServerName']", PLACEHOLDER); +// repoConfigDoc = XmlTools.setElementValue(repoConfigDoc, +// REPOSITORY_EXTENSION_POINT_XPATH + "/repository/repository/xa-datasource", PLACEHOLDER); + String url = XmlTools.getElementValue(repoConfigDoc, + REPOSITORY_EXTENSION_POINT_XPATH + "/repository/repository/property[@name='URL']"); + if (! Tools.isBlank(url)) { + repoConfigDoc = XmlTools.setElementValue(repoConfigDoc, + REPOSITORY_EXTENSION_POINT_XPATH + "/repository/repository/property[@name='URL']", + url + repositoryName); + } +// repoConfigDoc = XmlTools.setElementValue(repoConfigDoc, +// REPOSITORY_EXTENSION_POINT_XPATH + "/repository/repository/property[@name='ServerName']", PLACEHOLDER); repoConfigDoc = XmlTools.setElementValue(repoConfigDoc, REPOSITORY_EXTENSION_POINT_XPATH + "/repository/repository/property[@name='DatabaseName']", repositoryName); - repoConfigDoc = XmlTools.setElementValue(repoConfigDoc, - REPOSITORY_EXTENSION_POINT_XPATH + "/repository/repository/property[@name='User']", PLACEHOLDER); - repoConfigDoc = XmlTools.setElementValue(repoConfigDoc, - REPOSITORY_EXTENSION_POINT_XPATH + "/repository/repository/property[@name='Password']", PLACEHOLDER); +// repoConfigDoc = XmlTools.setElementValue(repoConfigDoc, +// REPOSITORY_EXTENSION_POINT_XPATH + "/repository/repository/property[@name='User']", PLACEHOLDER); +// repoConfigDoc = XmlTools.setElementValue(repoConfigDoc, +// REPOSITORY_EXTENSION_POINT_XPATH + "/repository/repository/property[@name='Password']", PLACEHOLDER); // Text substitutions within second extension point, "repositories" repoConfigDoc = XmlTools.setElementValue(repoConfigDoc, - REPOSITORIES_EXTENSION_POINT_XPATH + "/documentation", PLACEHOLDER); + REPOSITORIES_EXTENSION_POINT_XPATH + "/documentation", + String.format("The %s repository", repositoryName)); repoConfigDoc = XmlTools.setAttributeValue(repoConfigDoc, REPOSITORIES_EXTENSION_POINT_XPATH + "/repository", "name", repositoryName); repoConfigDoc = XmlTools.setAttributeValue(repoConfigDoc, - REPOSITORIES_EXTENSION_POINT_XPATH + "/repository", "label", PLACEHOLDER); + REPOSITORIES_EXTENSION_POINT_XPATH + "/repository", "label", + String.format("%s Repository", repositoryName)); return repoConfigDoc; } } diff --git a/services/common/src/main/java/org/collectionspace/services/common/XmlTools.java b/services/common/src/main/java/org/collectionspace/services/common/XmlTools.java index 03f3b6e53..1763e3e73 100644 --- a/services/common/src/main/java/org/collectionspace/services/common/XmlTools.java +++ b/services/common/src/main/java/org/collectionspace/services/common/XmlTools.java @@ -167,12 +167,39 @@ public class XmlTools { } } + /** + * Returns the (text node) value of a specified element in a dom4j XML document. + * @param doc A dom4j XML document. + * @param xpathExpr An XPath expression intended to match a single element + * in the XML document, in the default namespace. + * @return The (text node) value of the matched element, if any. + */ + public static String getElementValue(Document doc, String xpathExpr) { + String elementValue = ""; + if (Tools.isBlank(xpathExpr)) { + return elementValue; + } + try { + Node node = doc.selectSingleNode(xpathExpr); + if ((node == null) || (node.getNodeType() != Node.ELEMENT_NODE)) { + return elementValue; + } + Element element = (Element) node; + elementValue = element.getText(); + } catch (Exception e) { + System.err.println(e.getStackTrace()); + } finally { + return elementValue; + } + } + /** * Sets the (text node) value of a specified element in a dom4j XML document. * @param doc A dom4j XML document. * @param xpathExpr An XPath expression intended to match a single element * in the XML document, in the default namespace. - * @param elementValue The value that the element should contain. + * @param elementValue The value that the element should contain. If this + * provided value is null, the element's value will be set to an empty string. * @return The document with the (text node) value of the matched element, if * any, set to the provided value. */ -- 2.47.3