From b53946abfe748e909e401f64e87d3632f8ad3aeb Mon Sep 17 00:00:00 2001 From: Richard Millet Date: Fri, 12 Jul 2013 17:02:25 -0700 Subject: [PATCH] CSPACE-5678-D: Adjusting Service's XML merge of bindings to deal with new Application-generated bindings. --- services/authorization-mgt/import/pom.xml | 5 + .../importer/AuthorizationGen.java | 7 +- .../common/api/JEEServerDeployment.java | 12 +- services/common/pom.xml | 7 +- .../cspace/config/services/service-config.xml | 1 + .../services/common/ServiceMain.java | 8 +- .../config/TenantBindingConfigReaderImpl.java | 19 +- services/config/pom.xml | 6 +- .../config/AbstractConfigReaderImpl.java | 173 ++++++++++-------- .../services/common/config/ConfigReader.java | 12 +- .../config/ServicesConfigReaderImpl.java | 6 +- .../src/main/resources/service-config.xsd | 1 + .../nuxeo/ReportDocumentModelHandler.java | 3 +- 13 files changed, 152 insertions(+), 108 deletions(-) diff --git a/services/authorization-mgt/import/pom.xml b/services/authorization-mgt/import/pom.xml index 7efc29c42..e9345e0ef 100644 --- a/services/authorization-mgt/import/pom.xml +++ b/services/authorization-mgt/import/pom.xml @@ -47,6 +47,11 @@ org.collectionspace.services.authorization.jaxb ${project.version} + + org.collectionspace.services + org.collectionspace.services.config + ${project.version} + org.collectionspace.services org.collectionspace.services.common diff --git a/services/authorization-mgt/import/src/main/java/org/collectionspace/services/authorization/importer/AuthorizationGen.java b/services/authorization-mgt/import/src/main/java/org/collectionspace/services/authorization/importer/AuthorizationGen.java index b45d1defd..bfd913991 100644 --- a/services/authorization-mgt/import/src/main/java/org/collectionspace/services/authorization/importer/AuthorizationGen.java +++ b/services/authorization-mgt/import/src/main/java/org/collectionspace/services/authorization/importer/AuthorizationGen.java @@ -49,6 +49,7 @@ import org.collectionspace.services.authorization.RoleValue; import org.collectionspace.services.authorization.RolesList; import org.collectionspace.services.authorization.SubjectType; import org.collectionspace.services.common.authorization_mgt.AuthorizationCommon; +import org.collectionspace.services.common.config.ServicesConfigReaderImpl; import org.collectionspace.services.common.config.TenantBindingConfigReaderImpl; import org.collectionspace.services.common.security.SecurityUtils; import org.collectionspace.services.config.service.ServiceBindingType; @@ -88,9 +89,13 @@ public class AuthorizationGen { private List allRoleList; public void initialize(String tenantRootDirPath) throws Exception { + ServicesConfigReaderImpl servicesConfigReader = new ServicesConfigReaderImpl(tenantRootDirPath); + servicesConfigReader.read(); + Boolean useAppGeneratedBindings = servicesConfigReader.getConfiguration().isUseAppGeneratedTenantBindings(); + TenantBindingConfigReaderImpl tenantBindingConfigReader = new TenantBindingConfigReaderImpl(tenantRootDirPath); - tenantBindingConfigReader.read(); + tenantBindingConfigReader.read(useAppGeneratedBindings); tenantBindings = tenantBindingConfigReader.getTenantBindings(); cspaceTenantMgmntRole = buildTenantMgmntRole(); diff --git a/services/common-api/src/main/java/org/collectionspace/services/common/api/JEEServerDeployment.java b/services/common-api/src/main/java/org/collectionspace/services/common/api/JEEServerDeployment.java index 8ebd399bb..fc6108180 100644 --- a/services/common-api/src/main/java/org/collectionspace/services/common/api/JEEServerDeployment.java +++ b/services/common-api/src/main/java/org/collectionspace/services/common/api/JEEServerDeployment.java @@ -1,7 +1,17 @@ package org.collectionspace.services.common.api; +import java.io.File; + public interface JEEServerDeployment { + final public static String CSPACE_DIR_NAME = "cspace"; + final public static String CONFIG_DIR_PATH = "config" + File.separator + "services"; + + final public static String TENANT_BINDINGS_FILENAME_PREFIX = "tenant-bindings"; + final public static String TENANT_BINDINGS_PROTOTYPE_FILENAME = TENANT_BINDINGS_FILENAME_PREFIX + "-proto.xml"; + final public static String TENANT_BINDINGS_ROOTDIRNAME = "tenants"; + public final static String NUXEO_CLIENT_DIR = "nuxeo-client"; public final static String NUXEO_SERVER_DIR = "nuxeo-server"; - public final static String NUXEO_SERVER_PLUGINS_DIR = NUXEO_SERVER_DIR + "/" + "plugins"; + public final static String NUXEO_PLUGINS_DIR = "plugins"; + public final static String NUXEO_SERVER_PLUGINS_DIR = NUXEO_SERVER_DIR + File.separator + NUXEO_PLUGINS_DIR; } diff --git a/services/common/pom.xml b/services/common/pom.xml index 8ce480629..7551c8f4b 100644 --- a/services/common/pom.xml +++ b/services/common/pom.xml @@ -367,7 +367,12 @@ spring-security-acl ${spring.security.version} provided - + + + org.collectionspace.services + org.collectionspace.services.common-api + ${project.version} + diff --git a/services/common/src/main/cspace/config/services/service-config.xml b/services/common/src/main/cspace/config/services/service-config.xml index d4d669e4b..dd9bb6ed8 100644 --- a/services/common/src/main/cspace/config/services/service-config.xml +++ b/services/common/src/main/cspace/config/services/service-config.xml @@ -14,6 +14,7 @@ xmlns:types='http://collectionspace.org/services/config/types' xsi:schemaLocation='http://collectionspace.org/services/config ../resources/common.xsd'> + true 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 111123a72..2bf566b30 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 @@ -68,6 +68,7 @@ public class ServiceMain { private UriTemplateRegistry uriTemplateRegistry = new UriTemplateRegistry(); private static final String SERVER_HOME_PROPERTY = "catalina.home"; + private static final boolean USE_APP_GENERATED_CONFIG = true; private ServiceMain() { //empty @@ -207,10 +208,11 @@ public class ServiceMain { private void readConfig() throws Exception { //read service config servicesConfigReader = new ServicesConfigReaderImpl(getServerRootDir()); - servicesConfigReader.read(); - + servicesConfigReader.read(USE_APP_GENERATED_CONFIG); + + Boolean useAppGeneratedBindings = servicesConfigReader.getConfiguration().isUseAppGeneratedTenantBindings(); tenantBindingConfigReader = new TenantBindingConfigReaderImpl(getServerRootDir()); - tenantBindingConfigReader.read(); + tenantBindingConfigReader.read(useAppGeneratedBindings); } private void propagateConfiguredProperties() { diff --git a/services/common/src/main/java/org/collectionspace/services/common/config/TenantBindingConfigReaderImpl.java b/services/common/src/main/java/org/collectionspace/services/common/config/TenantBindingConfigReaderImpl.java index 103cecc2f..6f1e41f20 100644 --- a/services/common/src/main/java/org/collectionspace/services/common/config/TenantBindingConfigReaderImpl.java +++ b/services/common/src/main/java/org/collectionspace/services/common/config/TenantBindingConfigReaderImpl.java @@ -33,6 +33,8 @@ import java.util.Hashtable; import java.util.List; import org.apache.commons.io.FileUtils; +import org.collectionspace.services.common.ServiceMain; +import org.collectionspace.services.common.api.JEEServerDeployment; import org.collectionspace.services.common.api.Tools; import org.collectionspace.services.config.service.ServiceBindingType; import org.collectionspace.services.config.service.ServiceObjectType; @@ -57,10 +59,7 @@ import org.slf4j.LoggerFactory; public class TenantBindingConfigReaderImpl extends AbstractConfigReaderImpl> { final private static String TENANT_BINDINGS_ERROR = "Tenant bindings error: "; - final private static String TENANT_BINDINGS_ROOTDIRNAME = "tenants"; - final private static String TENANT_BINDINGS_FILENAME_PREFIX = "tenant-bindings"; - final private static String TENANT_BINDINGS_PROTOTYPE_FILENAME = TENANT_BINDINGS_FILENAME_PREFIX + "-proto.xml"; - final private static String TENANT_BINDINGS_DELTA_FILENAME = TENANT_BINDINGS_FILENAME_PREFIX + ".delta.xml"; + final private static String TENANT_BINDINGS_DELTA_FILENAME = JEEServerDeployment.TENANT_BINDINGS_FILENAME_PREFIX + ".delta.xml"; final private static String MERGED_SUFFIX = ".merged.xml"; final Logger logger = LoggerFactory.getLogger(TenantBindingConfigReaderImpl.class); @@ -93,7 +92,7 @@ public class TenantBindingConfigReaderImpl File result = null; String errMessage = null; try { - String tenantsRootPath = getConfigRootDir() + File.separator + TENANT_BINDINGS_ROOTDIRNAME; + String tenantsRootPath = getConfigRootDir() + File.separator + JEEServerDeployment.TENANT_BINDINGS_ROOTDIRNAME; File tenantsRootDir = new File(tenantsRootPath); if (tenantsRootDir.exists() == true) { result = tenantsRootDir; @@ -145,7 +144,7 @@ public class TenantBindingConfigReaderImpl if (result != null) { File outputDir = deltaFile.getParentFile(); String mergedFileName = outputDir.getAbsolutePath() + File.separator + - TenantBindingConfigReaderImpl.TENANT_BINDINGS_FILENAME_PREFIX + MERGED_SUFFIX; + JEEServerDeployment.TENANT_BINDINGS_FILENAME_PREFIX + MERGED_SUFFIX; File mergedOutFile = new File(mergedFileName); try { FileUtils.copyInputStreamToFile(result, mergedOutFile); @@ -160,20 +159,20 @@ public class TenantBindingConfigReaderImpl } @Override - public void read() throws Exception { + public void read(boolean useAppGeneratedBindings) throws Exception { String tenantsRootPath = getTenantsRootDir().getAbsolutePath(); - read(tenantsRootPath); + read(tenantsRootPath, useAppGeneratedBindings); } @Override - public void read(String tenantRootDirPath) throws Exception { + public void read(String tenantRootDirPath, boolean useAppGeneratedBindings) throws Exception { File tenantsRootDir = new File(tenantRootDirPath); if (tenantsRootDir.exists() == false) { throw new Exception("Cound not find tenant bindings root directory: " + tenantRootDirPath); } File protoBindingsFile = new File(tenantRootDirPath + File.separator + - TENANT_BINDINGS_PROTOTYPE_FILENAME); + JEEServerDeployment.TENANT_BINDINGS_PROTOTYPE_FILENAME); List tenantDirs = getDirectories(tenantsRootDir); tenantBindingTypeList = readTenantConfigs(protoBindingsFile, tenantDirs); diff --git a/services/config/pom.xml b/services/config/pom.xml index bd7943e51..c8eadb8a4 100644 --- a/services/config/pom.xml +++ b/services/config/pom.xml @@ -53,7 +53,11 @@ org.jvnet.jaxb2_commons jaxb2-basics-runtime - + + org.collectionspace.services + org.collectionspace.services.common-api + ${project.version} + diff --git a/services/config/src/main/java/org/collectionspace/services/common/config/AbstractConfigReaderImpl.java b/services/config/src/main/java/org/collectionspace/services/common/config/AbstractConfigReaderImpl.java index eb3439c2b..8afe58795 100644 --- a/services/config/src/main/java/org/collectionspace/services/common/config/AbstractConfigReaderImpl.java +++ b/services/config/src/main/java/org/collectionspace/services/common/config/AbstractConfigReaderImpl.java @@ -34,48 +34,53 @@ import java.util.List; import javax.xml.bind.JAXBContext; import javax.xml.bind.JAXBException; import javax.xml.bind.Unmarshaller; + +import org.collectionspace.services.common.api.JEEServerDeployment; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * AbstractConfigReader - * - * $LastChangedRevision: $ - * $LastChangedDate: $ + * + * $LastChangedRevision: $ $LastChangedDate: $ */ -public abstract class AbstractConfigReaderImpl - implements ConfigReader { +public abstract class AbstractConfigReaderImpl implements ConfigReader { - private final Logger logger = LoggerFactory.getLogger(AbstractConfigReaderImpl.class); - private String serverRootDir; + private final Logger logger = LoggerFactory + .getLogger(AbstractConfigReaderImpl.class); + private String serverRootDir; - AbstractConfigReaderImpl(String serverRootDir) { - this.serverRootDir = serverRootDir; - } + AbstractConfigReaderImpl(String serverRootDir) { + this.serverRootDir = serverRootDir; + } - @Override - abstract public String getFileName(); + @Override + abstract public String getFileName(); - @Override - abstract public void read() throws Exception; + @Override + abstract public void read(boolean useAppGeneratedBindings) throws Exception; - @Override - abstract public void read(String configFile) throws Exception; + @Override + abstract public void read(String configFile, boolean useAppGeneratedBindings) throws Exception; - @Override - abstract public T getConfiguration(); + @Override + abstract public T getConfiguration(); /** - * Gets a list of File items in the specified directory. If 'isDirectory' is true, then this - * method will return a list of items that are directories/folders; otherwise, it returns a list - * of file/document items. - * - * @param rootDir the root dir - * @param isDirectory the is directory + * Gets a list of File items in the specified directory. If 'isDirectory' is + * true, then this method will return a list of items that are + * directories/folders; otherwise, it returns a list of file/document items. + * + * @param rootDir + * the root dir + * @param isDirectory + * the is directory * @return the file children - * @throws IOException Signals that an I/O exception has occurred. + * @throws IOException + * Signals that an I/O exception has occurred. */ - List getFileChildren(File rootDir, boolean getDirectories) throws IOException { + List getFileChildren(File rootDir, boolean getDirectories) + throws IOException { ArrayList result = new ArrayList(); File[] children = rootDir.listFiles(); if (children != null) { @@ -88,73 +93,79 @@ public abstract class AbstractConfigReaderImpl } } else { String errMessage = "An IO exception and/or error occurred while reading the directory: " - + rootDir.getAbsolutePath(); + + rootDir.getAbsolutePath(); logger.debug(errMessage); throw new IOException(errMessage); } return result; } - + /** - * Gets a list of files/documents in the specified folder -does not return directories/folders. - * - * @param rootDir the root dir + * Gets a list of files/documents in the specified folder -does not return + * directories/folders. + * + * @param rootDir + * the root dir * @return the files - * @throws IOException Signals that an I/O exception has occurred. + * @throws IOException + * Signals that an I/O exception has occurred. */ List getFiles(File rootDir) throws IOException { return getFileChildren(rootDir, false); } - + List getDirectories(File rootDir) throws IOException { return getFileChildren(rootDir, true); } - - protected Object parse(File configFile, Class clazz) throws FileNotFoundException, JAXBException { - Object result = null; - - InputStream inputStream = new FileInputStream(configFile); - result = parse(inputStream, clazz); - if (logger.isDebugEnabled()) { - logger.debug("read() read file " + configFile.getAbsolutePath()); - } - - return result; - } - - /** - * parse parses given configuration file from the disk based on given class - * definition - * @param configFile - * @param clazz - * @return A JAXB object - * @throws JAXBException - * @throws Exception - */ - protected Object parse(InputStream configFileStream, Class clazz) throws JAXBException { - Object result = null; - - JAXBContext jc = JAXBContext.newInstance(clazz); - Unmarshaller um = jc.createUnmarshaller(); - result = um.unmarshal(configFileStream); - - return result; - } - - protected String getAbsoluteFileName(String configFileName) { - return serverRootDir - + File.separator + CSPACE_DIR_NAME - + File.separator + CONFIG_DIR_PATH - + File.separator + configFileName; - } - - protected String getServerRootDir() { - return serverRootDir; - } - - protected String getConfigRootDir() { - return serverRootDir - + File.separator + CSPACE_DIR_NAME - + File.separator + CONFIG_DIR_PATH; - } + + protected Object parse(File configFile, Class clazz) + throws FileNotFoundException, JAXBException { + Object result = null; + + InputStream inputStream = new FileInputStream(configFile); + result = parse(inputStream, clazz); + if (logger.isDebugEnabled()) { + logger.debug("read() read file " + configFile.getAbsolutePath()); + } + + return result; + } + + /** + * parse parses given configuration file from the disk based on given class + * definition + * + * @param configFile + * @param clazz + * @return A JAXB object + * @throws JAXBException + * @throws Exception + */ + protected Object parse(InputStream configFileStream, Class clazz) + throws JAXBException { + Object result = null; + + JAXBContext jc = JAXBContext.newInstance(clazz); + Unmarshaller um = jc.createUnmarshaller(); + result = um.unmarshal(configFileStream); + + return result; + } + + protected String getAbsoluteFileName(String configFileName) { + return serverRootDir + File.separator + + JEEServerDeployment.CSPACE_DIR_NAME + File.separator + + JEEServerDeployment.CONFIG_DIR_PATH + File.separator + + configFileName; + } + + protected String getServerRootDir() { + return serverRootDir; + } + + protected String getConfigRootDir() { + return serverRootDir + File.separator + + JEEServerDeployment.CSPACE_DIR_NAME + File.separator + + JEEServerDeployment.CONFIG_DIR_PATH; + } } diff --git a/services/config/src/main/java/org/collectionspace/services/common/config/ConfigReader.java b/services/config/src/main/java/org/collectionspace/services/common/config/ConfigReader.java index 0ba485543..6bc2e4de4 100644 --- a/services/config/src/main/java/org/collectionspace/services/common/config/ConfigReader.java +++ b/services/config/src/main/java/org/collectionspace/services/common/config/ConfigReader.java @@ -24,16 +24,16 @@ package org.collectionspace.services.common.config; import java.io.File; +import org.collectionspace.services.common.api.JEEServerDeployment; /** * ConfigReader is an interface for a configuration reader */ public interface ConfigReader { - final public static String CSPACE_DIR_NAME = "cspace"; - final public static String CONFIG_DIR_PATH = "config" + File.separator + "services"; final public static String RESOURCES_DIR_NAME = "resources"; - final public static String RESOURCES_DIR_PATH = CSPACE_DIR_NAME + File.separator + CONFIG_DIR_PATH + File.separator + RESOURCES_DIR_NAME; + final public static String RESOURCES_DIR_PATH = JEEServerDeployment.CSPACE_DIR_NAME + File.separator + + JEEServerDeployment.CONFIG_DIR_PATH + File.separator + RESOURCES_DIR_NAME; /** * getFileName - get configuration file name @@ -42,17 +42,17 @@ public interface ConfigReader { public String getFileName(); /** - * read parse and read the default configruation file from default location + * read parse and read the default configuration file from default location * @throws Exception */ - public void read() throws Exception; + public void read(boolean useAppGeneratedBindings) throws Exception; /** * read parse and read the given configruation file. * @param configFile fully qualified file name * @throws Exception */ - public void read(String configFile) throws Exception; + public void read(String configFile, boolean useAppGeneratedBindings) throws Exception; /** * getConfig get configuration binding diff --git a/services/config/src/main/java/org/collectionspace/services/common/config/ServicesConfigReaderImpl.java b/services/config/src/main/java/org/collectionspace/services/common/config/ServicesConfigReaderImpl.java index f5ab1c02f..d92a96adc 100644 --- a/services/config/src/main/java/org/collectionspace/services/common/config/ServicesConfigReaderImpl.java +++ b/services/config/src/main/java/org/collectionspace/services/common/config/ServicesConfigReaderImpl.java @@ -55,13 +55,13 @@ public class ServicesConfigReaderImpl } @Override - public void read() throws Exception { + public void read(boolean useAppGeneratedBindings) throws Exception { String configFileName = getAbsoluteFileName(CONFIG_FILE_NAME); - read(configFileName); + read(configFileName, useAppGeneratedBindings); } @Override - public void read(String configFileName) throws Exception { + public void read(String configFileName, boolean useAppGeneratedBindings) throws Exception { if (logger.isDebugEnabled()) { logger.debug("read() config file=" + configFileName); } diff --git a/services/config/src/main/resources/service-config.xsd b/services/config/src/main/resources/service-config.xsd index 84381ba6c..cda398ffb 100644 --- a/services/config/src/main/resources/service-config.xsd +++ b/services/config/src/main/resources/service-config.xsd @@ -23,6 +23,7 @@ + diff --git a/services/report/service/src/main/java/org/collectionspace/services/report/nuxeo/ReportDocumentModelHandler.java b/services/report/service/src/main/java/org/collectionspace/services/report/nuxeo/ReportDocumentModelHandler.java index 41d71ea3c..30b7e9762 100644 --- a/services/report/service/src/main/java/org/collectionspace/services/report/nuxeo/ReportDocumentModelHandler.java +++ b/services/report/service/src/main/java/org/collectionspace/services/report/nuxeo/ReportDocumentModelHandler.java @@ -45,6 +45,7 @@ import org.collectionspace.services.report.ReportsCommon; import org.collectionspace.services.client.PoxPayloadIn; import org.collectionspace.services.client.PoxPayloadOut; import org.collectionspace.services.common.ServiceMain; +import org.collectionspace.services.common.api.JEEServerDeployment; import org.collectionspace.services.common.config.ConfigReader; import org.collectionspace.services.common.context.ServiceContext; import org.collectionspace.services.common.document.BadRequestException; @@ -185,7 +186,7 @@ public class ReportDocumentModelHandler extends DocHandlerBase { Response response = null; try { String fullPath = ServiceMain.getInstance().getServerRootDir() + - File.separator + ConfigReader.CSPACE_DIR_NAME + + File.separator + JEEServerDeployment.CSPACE_DIR_NAME + File.separator + REPORTS_FOLDER + // File.separator + tenantName + File.separator + reportFileName; -- 2.47.3