From: Cherian Mathew Date: Tue, 6 May 2014 14:45:58 +0000 (+0000) Subject: .classpath : added test resources in classpath X-Git-Tag: 3.6.0~640 X-Git-Url: https://dev.e-taxonomy.eu/gitweb/taxeditor.git/commitdiff_plain/07d21e62a676e7bb8cec105b1bdba36656429650 .classpath : added test resources in classpath CdmPersistentRemoteSourceTest : added new tests for remote source connection CdmRemoteSourceBase : added code to connect to the target database (before initialising the full application context) to retrieve metadata CdmRemoteSource, CdmPersistentRemoteSource : added required methods remotingApplicationContext : optimisations --- diff --git a/eu.etaxonomy.taxeditor.cdmlib/.classpath b/eu.etaxonomy.taxeditor.cdmlib/.classpath index 12b318a2a..0ad6b0dd8 100644 --- a/eu.etaxonomy.taxeditor.cdmlib/.classpath +++ b/eu.etaxonomy.taxeditor.cdmlib/.classpath @@ -5,6 +5,7 @@ + diff --git a/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/cdm/api/application/CdmApplicationRemoteController.java b/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/cdm/api/application/CdmApplicationRemoteController.java index c25b01ca6..5473ac141 100644 --- a/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/cdm/api/application/CdmApplicationRemoteController.java +++ b/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/cdm/api/application/CdmApplicationRemoteController.java @@ -148,6 +148,7 @@ public class CdmApplicationRemoteController extends CdmApplicationController { progressMonitor.worked(1); XmlBeanDefinitionReader xmlReader = new XmlBeanDefinitionReader(applicationContext); + //xmlReader.setValidationMode(XmlBeanDefinitionReader.VALIDATION_NONE); progressMonitor.subTask("Registering resources."); xmlReader.loadBeanDefinitions(applicationContextResource); progressMonitor.worked(1); diff --git a/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/cdm/remote/CdmPersistentRemoteSource.java b/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/cdm/remote/CdmPersistentRemoteSource.java index 487430b71..a6cd14cd2 100644 --- a/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/cdm/remote/CdmPersistentRemoteSource.java +++ b/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/cdm/remote/CdmPersistentRemoteSource.java @@ -14,6 +14,7 @@ import static eu.etaxonomy.cdm.common.XmlHelp.insertXmlBean; import static eu.etaxonomy.cdm.common.XmlHelp.insertXmlValueProperty; import static eu.etaxonomy.cdm.common.XmlHelp.saveToXml; +import java.util.ArrayList; import java.util.Enumeration; import java.util.List; import java.util.Properties; @@ -26,6 +27,7 @@ import eu.etaxonomy.cdm.common.CdmUtils; import eu.etaxonomy.cdm.common.XmlHelp; import eu.etaxonomy.cdm.config.CdmPersistentSourceUtils; import eu.etaxonomy.cdm.config.CdmPersistentXMLSource; +import eu.etaxonomy.cdm.config.CdmSourceException; import eu.etaxonomy.cdm.config.ICdmPersistentSource; import eu.etaxonomy.cdm.config.CdmPersistentXMLSource.CdmSourceProperties; import eu.etaxonomy.cdm.database.CdmDataSource; @@ -79,7 +81,7 @@ public class CdmPersistentRemoteSource extends CdmRemoteSourceBase implements IC * @throws CdmRemoteSourceException */ private CdmPersistentRemoteSource(String remoteSource) throws CdmRemoteSourceException { - setName(remoteSource); + CdmPersistentXMLSource cdmPersistentXMLSource = CdmPersistentXMLSource.NewInstance(remoteSource, REMOTESOURCE_BEAN_POSTFIX); if(cdmPersistentXMLSource.getElement() != null) { beanName = cdmPersistentXMLSource.getBeanName(); @@ -90,6 +92,7 @@ public class CdmPersistentRemoteSource extends CdmRemoteSourceBase implements IC } else { throw new CdmRemoteSourceException("Remote source '" + remoteSource + "' does not exist in settings file"); } + initDatabaseConnection(); } private static void checkProperties(Properties cdmSourceProperties) throws CdmRemoteSourceException { @@ -207,5 +210,40 @@ public class CdmPersistentRemoteSource extends CdmRemoteSourceBase implements IC Element bean = CdmPersistentSourceUtils.getCdmSourceBeanXml(strRemoteSourceName, REMOTESOURCE_BEAN_POSTFIX); return (bean != null); } + + /** + * Returns a list of all datasources stored in the datasource config file + * @return all existing data sources + * @throws CdmRemoteSourceException + */ + @SuppressWarnings("unchecked") + static public List getAllRemoteSources() throws CdmRemoteSourceException{ + List remoteSources = new ArrayList(); + + Element root = getBeansRoot(CdmPersistentSourceUtils.getCdmSourceInputStream()); + if (root == null){ + return null; + }else{ + List lsChildren = root.getChildren("bean", root.getNamespace()); + + for (Element elBean : lsChildren){ + String strId = elBean.getAttributeValue("id"); + if (strId != null && strId.endsWith(REMOTESOURCE_BEAN_POSTFIX)){ + strId = strId.replace(REMOTESOURCE_BEAN_POSTFIX, ""); + remoteSources.add(new CdmPersistentRemoteSource(strId)); + } + } + } + return remoteSources; + } + + @Override + public String toString(){ + if (getName() != null){ + return getName(); + }else{ + return null; + } + } } diff --git a/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/cdm/remote/CdmRemoteSource.java b/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/cdm/remote/CdmRemoteSource.java index 197d40bb1..9dbb34b3a 100644 --- a/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/cdm/remote/CdmRemoteSource.java +++ b/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/cdm/remote/CdmRemoteSource.java @@ -16,6 +16,19 @@ import eu.etaxonomy.cdm.model.name.NomenclaturalCode; */ public class CdmRemoteSource extends CdmRemoteSourceBase { + /** + * Creates a new instance of CdmRemoteSource + * + * @param name + * @param server + * @param port + * @param contextPath + * @param nomenclaturalCode + * @return + */ + public static CdmRemoteSource NewInstance() { + return new CdmRemoteSource(DEFAULT_NAME, DEFAULT_SERVER, DEFAULT_PORT, DEFAULT_CONTEXT_PATH, DEFAULT_NOMENCLATURAL_CODE); + } /** * Creates a new instance of CdmRemoteSource diff --git a/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/cdm/remote/CdmRemoteSourceBase.java b/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/cdm/remote/CdmRemoteSourceBase.java index 031377cb0..d24baa6ee 100644 --- a/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/cdm/remote/CdmRemoteSourceBase.java +++ b/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/cdm/remote/CdmRemoteSourceBase.java @@ -8,11 +8,15 @@ */ package eu.etaxonomy.cdm.remote; +import java.util.Map; + import org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean; import eu.etaxonomy.cdm.api.service.IDatabaseService; import eu.etaxonomy.cdm.config.CdmSource; import eu.etaxonomy.cdm.config.CdmSourceException; +import eu.etaxonomy.cdm.database.DatabaseTypeEnum; +import eu.etaxonomy.cdm.model.metadata.CdmMetaData.MetaDataPropertyName; import eu.etaxonomy.cdm.model.name.NomenclaturalCode; /** @@ -23,6 +27,11 @@ import eu.etaxonomy.cdm.model.name.NomenclaturalCode; */ public class CdmRemoteSourceBase extends CdmSource implements ICdmRemoteSource { + protected static final String DEFAULT_NAME = "default"; + protected static final String DEFAULT_SERVER = "127.0.0.1"; + protected static final int DEFAULT_PORT = 8080; + protected static final String DEFAULT_CONTEXT_PATH = ""; + protected static final NomenclaturalCode DEFAULT_NOMENCLATURAL_CODE = NomenclaturalCode.ICNAFP; private String contextPath; private String baseUrl; @@ -33,11 +42,11 @@ public class CdmRemoteSourceBase extends CdmSource implements ICdmRemoteSource { * */ protected CdmRemoteSourceBase() { - setName("default"); - setServer("127.0.0.1"); - setPort(8080); - setContextPath(""); - setNomenclaturalCode(NomenclaturalCode.ICNAFP); + setName(DEFAULT_NAME); + setServer(DEFAULT_SERVER); + setPort(DEFAULT_PORT); + setContextPath(DEFAULT_CONTEXT_PATH); + setNomenclaturalCode(DEFAULT_NOMENCLATURAL_CODE); } /** @@ -54,20 +63,25 @@ public class CdmRemoteSourceBase extends CdmSource implements ICdmRemoteSource { setServer(server); setPort(port); setContextPath(contextPath); - setNomenclaturalCode(nomenclaturalCode); - if(contextPath == null || contextPath.equals("")) { - setBaseUrl("http://" + server + ":" + String.valueOf(port)); + setNomenclaturalCode(nomenclaturalCode); + initDatabaseConnection(); + } + + protected void initDatabaseConnection() { + if(getContextPath() == null || getContextPath().equals("")) { + setBaseUrl("http://" + getServer() + ":" + String.valueOf(getPort())); } else { - setBaseUrl("http://" + server + ":" + String.valueOf(port) + "/" + contextPath); - } + setBaseUrl("http://" + getServer() + ":" + String.valueOf(getPort()) + "/" + getContextPath()); + } // the database service needs to be initialised (before the spring // application context initialsation) since it is required to // to make queries related to the source database HttpInvokerProxyFactoryBean proxy = new HttpInvokerProxyFactoryBean(); proxy.setServiceInterface(IDatabaseService.class); - proxy.setServiceUrl(getBaseUrl() + "/remoting/database.service"); + proxy.setServiceUrl(baseUrl + "/remoting/database.service"); proxy.afterPropertiesSet(); databaseService = (IDatabaseService) proxy.getObject(); + } /* (non-Javadoc) @@ -150,4 +164,11 @@ public class CdmRemoteSourceBase extends CdmSource implements ICdmRemoteSource { return "Conncting to Remote CDM Server " + getName(); } + + @Override + public Map getMetaDataMap() throws CdmSourceException { + return databaseService.getCdmMetadataMap(); + } + + } diff --git a/eu.etaxonomy.taxeditor.cdmlib/src/main/resources/eu/etaxonomy/cdm/remotingApplicationContext.xml b/eu.etaxonomy.taxeditor.cdmlib/src/main/resources/eu/etaxonomy/cdm/remotingApplicationContext.xml index 825c80acd..2f564e994 100644 --- a/eu.etaxonomy.taxeditor.cdmlib/src/main/resources/eu/etaxonomy/cdm/remotingApplicationContext.xml +++ b/eu.etaxonomy.taxeditor.cdmlib/src/main/resources/eu/etaxonomy/cdm/remotingApplicationContext.xml @@ -10,11 +10,13 @@ - + - - - + + + + + diff --git a/eu.etaxonomy.taxeditor.cdmlib/src/test/java/eu/etaxonomy/taxeditor/remoting/CdmPersistentRemoteSourceTest.java b/eu.etaxonomy.taxeditor.cdmlib/src/test/java/eu/etaxonomy/taxeditor/remoting/CdmPersistentRemoteSourceTest.java index 40032ef76..c601d3ad4 100644 --- a/eu.etaxonomy.taxeditor.cdmlib/src/test/java/eu/etaxonomy/taxeditor/remoting/CdmPersistentRemoteSourceTest.java +++ b/eu.etaxonomy.taxeditor.cdmlib/src/test/java/eu/etaxonomy/taxeditor/remoting/CdmPersistentRemoteSourceTest.java @@ -9,6 +9,8 @@ package eu.etaxonomy.taxeditor.remoting; +import java.util.Map; + import org.apache.log4j.Level; import org.apache.log4j.Logger; import org.junit.Assert; @@ -20,6 +22,8 @@ import static org.hamcrest.CoreMatchers.*; import eu.etaxonomy.cdm.config.CdmPersistentSourceUtils; import eu.etaxonomy.cdm.config.CdmPersistentXMLSource.CdmSourceProperties; +import eu.etaxonomy.cdm.config.CdmSourceException; +import eu.etaxonomy.cdm.model.metadata.CdmMetaData.MetaDataPropertyName; import eu.etaxonomy.cdm.model.name.NomenclaturalCode; import eu.etaxonomy.cdm.remote.CdmPersistentRemoteSource; import eu.etaxonomy.cdm.remote.CdmRemoteSource; @@ -72,9 +76,67 @@ public class CdmPersistentRemoteSourceTest extends UnitilsJUnit4 { } catch (CdmRemoteSourceException e) { Assert.fail("Initialising an existing remote source should not throw an exception"); - } + } + } + + + + + @Test + public void whenConnectingToAnActiveServerThenConnectSuccessfully() { + // check if active server throws the right exception + try { + remotePersistentSource = CdmPersistentRemoteSource.NewInstance("default"); + + String dbSchemaVersion = ""; + try { + dbSchemaVersion = remotePersistentSource.getDbSchemaVersion(); + } catch (CdmSourceException e) { + Assert.fail("getDbSchemaVersion() on active cdm server should not have thrown CdmSourceException"); + } + logger.info("dbSchemaVersion is " + dbSchemaVersion); + + + boolean isDbEmpty = false; + try { + isDbEmpty = remotePersistentSource.isDbEmpty(); + } catch (CdmSourceException e) { + Assert.fail("isDbEmpty() on active cdm server should not have thrown CdmSourceException"); + } + Assert.assertFalse(isDbEmpty); + - + boolean check = false; + try { + check = remotePersistentSource.checkConnection(); + } catch (CdmSourceException e) { + Assert.fail("checkConnection() on active cdm server should not have thrown CdmSourceException"); + } + Assert.assertTrue(check); + } catch (CdmRemoteSourceException e1) { + // TODO Auto-generated catch block + e1.printStackTrace(); + } + + } + + @Test + public void whenRequestingMetadatFromRemoteSourceThenMetaDataIsRetrieved() { + try { + remotePersistentSource = CdmPersistentRemoteSource.NewInstance("default"); + Map cdmMetaDataMap = remotePersistentSource.getMetaDataMap(); + for(MetaDataPropertyName mdpn : cdmMetaDataMap.keySet()) { + String value = cdmMetaDataMap.get(mdpn); + logger.info("MetaData Property " + mdpn.name() + " has value " + value); + Assert.assertNotNull("Meta Data Value for property for " + mdpn.name() + " should not be null", value); + } + + } catch (CdmRemoteSourceException e) { + Assert.fail("Initialising an existing remote source should not throw an exception"); + } catch (CdmSourceException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } } @Test @@ -166,5 +228,7 @@ public class CdmPersistentRemoteSourceTest extends UnitilsJUnit4 { logger.info(e.getMessage()); } } + + }