<classpathentry kind="src" path="src/main/java"/>
<classpathentry kind="src" path="src/test/java"/>
<classpathentry kind="src" path="src/main/resources"/>
+ <classpathentry kind="src" path="src/test/resources"/>
<classpathentry exported="true" kind="lib" path="lib/activation-1.1.1.jar"/>
<classpathentry exported="true" kind="lib" path="lib/antlr-2.7.7.jar"/>
<classpathentry exported="true" kind="lib" path="lib/aopalliance-1.0.jar"/>
progressMonitor.worked(1);
XmlBeanDefinitionReader xmlReader = new XmlBeanDefinitionReader(applicationContext);
+ //xmlReader.setValidationMode(XmlBeanDefinitionReader.VALIDATION_NONE);
progressMonitor.subTask("Registering resources.");
xmlReader.loadBeanDefinitions(applicationContextResource);
progressMonitor.worked(1);
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;
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;
* @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();
} else {
throw new CdmRemoteSourceException("Remote source '" + remoteSource + "' does not exist in settings file");
}
+ initDatabaseConnection();
}
private static void checkProperties(Properties cdmSourceProperties) throws CdmRemoteSourceException {
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<CdmPersistentRemoteSource> getAllRemoteSources() throws CdmRemoteSourceException{
+ List<CdmPersistentRemoteSource> remoteSources = new ArrayList<CdmPersistentRemoteSource>();
+
+ Element root = getBeansRoot(CdmPersistentSourceUtils.getCdmSourceInputStream());
+ if (root == null){
+ return null;
+ }else{
+ List<Element> 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;
+ }
+ }
}
*/
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
*/
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;
/**
*/
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;
*
*/
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);
}
/**
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)
return "Conncting to Remote CDM Server " + getName();
}
+
+ @Override
+ public Map<MetaDataPropertyName, String> getMetaDataMap() throws CdmSourceException {
+ return databaseService.getCdmMetadataMap();
+ }
+
+
}
\r
<!-- <bean id="remoteTermInitializer" class="eu.etaxonomy.cdm.remote.service.RemoteTermInitializer"/>-->\r
\r
- <context:annotation-config/>\r
+<!-- <context:annotation-config/> -->\r
\r
- <context:component-scan base-package="eu/etaxonomy/cdm/api/application">\r
- <context:exclude-filter type="regex" expression="eu\.etaxonomy\.cdm\.api\.application\.CdmApplicationDefaultConfiguration" /> \r
- </context:component-scan>\r
+<!-- <context:component-scan base-package="eu/etaxonomy/cdm/api/application"> -->\r
+<!-- <context:exclude-filter type="regex" expression="eu\.etaxonomy\.cdm\.api\.application\.CdmApplicationDefaultConfiguration" /> -->\r
+<!-- </context:component-scan> -->\r
+ \r
+ <bean id="cdmApplicationRemoteConfiguration" class="eu.etaxonomy.cdm.api.application.CdmApplicationRemoteConfiguration"/>\r
\r
<import resource="classpath:/eu/etaxonomy/cdm/remoting_services_security.xml"/> \r
\r
package eu.etaxonomy.taxeditor.remoting;
+import java.util.Map;
+
import org.apache.log4j.Level;
import org.apache.log4j.Logger;
import org.junit.Assert;
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;
} 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<MetaDataPropertyName, String> 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
logger.info(e.getMessage());
}
}
+
+
}