* The contents of this file are subject to the Mozilla Public License Version 1.1\r
* See LICENSE.TXT at the top of this package for the full license terms.\r
*/\r
-\r
package eu.etaxonomy.cdm.api.application;\r
\r
import java.util.ArrayList;\r
import java.util.List;\r
import java.util.Map;\r
\r
-import org.apache.log4j.Logger;\r
-import org.springframework.beans.BeansException;\r
-import org.springframework.context.ApplicationContext;\r
-import org.springframework.context.ApplicationContextAware;\r
+import org.apache.commons.lang3.StringUtils;\r
+import org.apache.logging.log4j.LogManager;\r
+import org.apache.logging.log4j.Logger;\r
import org.springframework.remoting.httpinvoker.CachingHttpInvokerProxyFactoryBean;\r
import org.springframework.remoting.httpinvoker.HttpComponentsHttpInvokerRequestExecutor;\r
import org.springframework.security.access.AccessDecisionVoter;\r
import org.springframework.security.core.context.SecurityContext;\r
import org.springframework.security.core.context.SecurityContextHolder;\r
import org.springframework.stereotype.Component;\r
-import org.springframework.transaction.PlatformTransactionManager;\r
-import org.springframework.transaction.TransactionStatus;\r
\r
-import eu.etaxonomy.cdm.api.conversation.ConversationHolder;\r
-import eu.etaxonomy.cdm.api.conversation.ConversationHolderMock;\r
import eu.etaxonomy.cdm.api.service.IAgentService;\r
import eu.etaxonomy.cdm.api.service.IAnnotationService;\r
import eu.etaxonomy.cdm.api.service.IClassificationService;\r
import eu.etaxonomy.cdm.api.service.ICollectionService;\r
import eu.etaxonomy.cdm.api.service.ICommonService;\r
import eu.etaxonomy.cdm.api.service.IDatabaseService;\r
+import eu.etaxonomy.cdm.api.service.IDescriptionElementService;\r
import eu.etaxonomy.cdm.api.service.IDescriptionService;\r
import eu.etaxonomy.cdm.api.service.IDescriptiveDataSetService;\r
import eu.etaxonomy.cdm.api.service.IEntityConstraintViolationService;\r
import eu.etaxonomy.cdm.api.service.IEntityValidationService;\r
import eu.etaxonomy.cdm.api.service.IEventBaseService;\r
-import eu.etaxonomy.cdm.api.service.IFeatureNodeService;\r
-import eu.etaxonomy.cdm.api.service.IFeatureTreeService;\r
import eu.etaxonomy.cdm.api.service.IGrantedAuthorityService;\r
import eu.etaxonomy.cdm.api.service.IGroupService;\r
import eu.etaxonomy.cdm.api.service.IIdentificationKeyService;\r
import eu.etaxonomy.cdm.api.service.ITestService;\r
import eu.etaxonomy.cdm.api.service.IUserService;\r
import eu.etaxonomy.cdm.api.service.IVocabularyService;\r
+import eu.etaxonomy.cdm.api.service.geo.IDistributionService;\r
import eu.etaxonomy.cdm.api.service.longrunningService.ILongRunningTasksService;\r
+import eu.etaxonomy.cdm.api.service.media.MediaInfoFactory;\r
import eu.etaxonomy.cdm.api.service.molecular.IAmplificationService;\r
import eu.etaxonomy.cdm.api.service.molecular.IPrimerService;\r
import eu.etaxonomy.cdm.api.service.molecular.ISequenceService;\r
+import eu.etaxonomy.cdm.api.service.registration.IRegistrationWorkingSetService;\r
+import eu.etaxonomy.cdm.api.service.security.IAccountRegistrationService;\r
+import eu.etaxonomy.cdm.api.service.security.IPasswordResetService;\r
import eu.etaxonomy.cdm.ext.geo.IEditGeoService;\r
import eu.etaxonomy.cdm.io.service.IIOService;\r
-import eu.etaxonomy.cdm.persistence.hibernate.permission.CdmPermissionEvaluator;\r
-import eu.etaxonomy.cdm.persistence.hibernate.permission.ICdmPermissionEvaluator;\r
-import eu.etaxonomy.cdm.persistence.hibernate.permission.UnanimousBasedUnrevokable;\r
-import eu.etaxonomy.cdm.persistence.hibernate.permission.voter.DescriptionBaseVoter;\r
-import eu.etaxonomy.cdm.persistence.hibernate.permission.voter.DescriptionElementVoter;\r
-import eu.etaxonomy.cdm.persistence.hibernate.permission.voter.GrantAlwaysVoter;\r
-import eu.etaxonomy.cdm.persistence.hibernate.permission.voter.TaxonBaseVoter;\r
-import eu.etaxonomy.cdm.persistence.hibernate.permission.voter.TaxonNodeVoter;\r
+import eu.etaxonomy.cdm.persistence.permission.CdmPermissionEvaluator;\r
+import eu.etaxonomy.cdm.persistence.permission.ICdmPermissionEvaluator;\r
+import eu.etaxonomy.cdm.persistence.permission.UnanimousBasedUnrevokable;\r
+import eu.etaxonomy.cdm.persistence.permission.voter.DescriptionBaseVoter;\r
+import eu.etaxonomy.cdm.persistence.permission.voter.DescriptionElementVoter;\r
+import eu.etaxonomy.cdm.persistence.permission.voter.GrantAlwaysVoter;\r
+import eu.etaxonomy.cdm.persistence.permission.voter.TaxonBaseVoter;\r
+import eu.etaxonomy.cdm.persistence.permission.voter.TaxonNodeVoter;\r
+import eu.etaxonomy.taxeditor.remoting.source.CdmRemoteSource;\r
import eu.etaxonomy.taxeditor.remoting.source.ICdmRemoteSource;\r
import eu.etaxonomy.taxeditor.service.AuthenticatingHttpInvokerRequestExecutor;\r
import eu.etaxonomy.taxeditor.service.CachedCommonServiceImpl;\r
import eu.etaxonomy.taxeditor.session.CdmEntitySessionManager;\r
import eu.etaxonomy.taxeditor.session.ICdmEntitySessionManager;\r
\r
-\r
/**\r
* CDM Application Configuration class which manages the configuration for remoting\r
* clients\r
*/\r
@Component\r
// TODO split into CdmRepository and proper @Configuration class\r
-public class CdmApplicationRemoteConfiguration implements ICdmRepository, ApplicationContextAware {\r
+public class CdmApplicationRemoteConfiguration implements ICdmRepository {\r
\r
@SuppressWarnings("unused")\r
- private static final Logger logger = Logger.getLogger(CdmApplicationRemoteConfiguration.class);\r
+ private static final Logger logger = LogManager.getLogger();\r
\r
/**\r
- * Timeout for service lookup etc. This timeout (milliseconds) should me more\r
+ * Timeout for service lookup etc. This timeout (milliseconds) should be more\r
* strict than {@link #HTTP_READ_TIMEOUT} to avoid connecting to\r
* cdm servers when the network quality is too bad.\r
- *\r
+ * Note AM: IMO we should not be to strict, sometimes services do not respond too fast\r
+ * during the first call (e.g. test server), therefore I put this up from 1 to 3 sec.\r
+ * Better we should inform the user that the connection might be of low quality\r
+ * instead of making the connection completely unavailable.\r
*/\r
- public static final int HTTP_READ_TIMEOUT_MIN = 1000; // one second\r
+ public static final int HTTP_READ_TIMEOUT_MIN = 3000; // 3 seconds\r
\r
/**\r
* Timeout for normal operation (milliseconds)\r
*/\r
public static final int HTTP_READ_TIMEOUT = 10 * 60 * 1000;\r
\r
-\r
- protected ApplicationContext applicationContext;\r
-\r
private ICdmRemoteSource remoteSource;\r
\r
//TODO should be something like Map<Class<IService>, IService>, but we have no common service base interface yet\r
\r
public CdmApplicationRemoteConfiguration(ICdmRemoteSource remoteSource) {\r
this.remoteSource = remoteSource;\r
-\r
}\r
\r
public void setRemoteSource(ICdmRemoteSource remoteSource) {\r
\r
String baseUrl;\r
String protocol = remoteSource.getPort() == 443 ? "https" : "http";\r
- if(remoteSource.getContextPath() == null || remoteSource.getContextPath().equals("")) {\r
+\r
+ String contextPath = (remoteSource instanceof CdmRemoteSource)? ((CdmRemoteSource)remoteSource).getContextPath() : "";\r
+ if(StringUtils.isBlank(contextPath)) {\r
baseUrl = protocol + "://" + remoteSource.getServer() + ":" + String.valueOf(remoteSource.getPort());\r
} else {\r
- baseUrl = protocol + "://" + remoteSource.getServer() + ":" + String.valueOf(remoteSource.getPort()) + "/" + remoteSource.getContextPath();\r
+ baseUrl = protocol + "://" + remoteSource.getServer() + ":" + String.valueOf(remoteSource.getPort()) + "/" + contextPath;\r
}\r
CachingHttpInvokerProxyFactoryBean proxyFactory = new CachingHttpInvokerProxyFactoryBean();\r
proxyFactory.setServiceInterface(clazz);\r
\r
// ****************************** APPLICATION CONTEXT *************************************************/\r
\r
- @Override\r
- public void setApplicationContext(ApplicationContext applicationContext) throws BeansException{\r
- this.applicationContext = applicationContext;\r
- }\r
-\r
- @Override\r
- public PlatformTransactionManager getTransactionManager() throws UnsupportedOperationException {\r
- throw new UnsupportedOperationException("getTransactionManager is not implemented for CdmApplicationRemoteConfiguration");\r
- }\r
-\r
public IEditGeoService getEditGeoService() {\r
return (IEditGeoService) getService(IEditGeoService.class, "/remoting/editgeo.service", new AuthenticatingHttpInvokerRequestExecutor());\r
}\r
// ****************************** GETTER *************************************************/\r
\r
@Override\r
- public final Object getBean(String name){\r
- throw new UnsupportedOperationException("getBean is not implemented for CdmApplicationRemoteConfiguration");\r
+ public IAccountRegistrationService getAccountRegistrationService() {\r
+ return (IAccountRegistrationService) getService(IAccountRegistrationService.class, "/remoting/accountregistrationservice.service", new AuthenticatingHttpInvokerRequestExecutor());\r
}\r
\r
@Override\r
return (IDescriptionService) getService(IDescriptionService.class, "/remoting/description.service", new AuthenticatingHttpInvokerRequestExecutor());\r
}\r
\r
+ @Override\r
+ public IDistributionService getDistributionService(){\r
+ return (IDistributionService) getService(IDistributionService.class, "/remoting/distribution.service", new AuthenticatingHttpInvokerRequestExecutor());\r
+ }\r
+\r
+ @Override\r
+ public IDescriptionElementService getDescriptionElementService(){\r
+ return (IDescriptionElementService) getService(IDescriptionElementService.class, "/remoting/descriptionelement.service", new AuthenticatingHttpInvokerRequestExecutor());\r
+ }\r
+\r
@Override\r
public IOccurrenceService getOccurrenceService(){\r
return (IOccurrenceService) getService(IOccurrenceService.class, "/remoting/occurrence.service", new AuthenticatingHttpInvokerRequestExecutor());\r
return (IUserService) getService(IUserService.class, "/remoting-public/user.service", new AuthenticatingHttpInvokerRequestExecutor());\r
}\r
\r
-\r
public static IUserService getUserService(ICdmRemoteSource remoteSource) {\r
return (IUserService) getService(IUserService.class, "/remoting-public/user.service", remoteSource, new HttpComponentsHttpInvokerRequestExecutor());\r
}\r
return (IGrantedAuthorityService) getService(IGrantedAuthorityService.class, "/remoting/grantedauthority.service", new AuthenticatingHttpInvokerRequestExecutor());\r
}\r
\r
-\r
@Override\r
public ProviderManager getAuthenticationManager(){\r
if(authenticationManager == null) {\r
return new ProviderManager(Arrays.asList((AuthenticationProvider)daoAuthenticationProvider));\r
}\r
\r
-\r
- @Override\r
- public ConversationHolder NewConversation() {\r
- return new ConversationHolderMock();\r
- }\r
-\r
@Override\r
public ICollectionService getCollectionService(){\r
return (ICollectionService) getService(ICollectionService.class, "/remoting/collection.service", new AuthenticatingHttpInvokerRequestExecutor());\r
}\r
\r
- @Override\r
- public IFeatureTreeService getFeatureTreeService(){\r
- return (IFeatureTreeService) getService(IFeatureTreeService.class, "/remoting/featuretree.service", new AuthenticatingHttpInvokerRequestExecutor());\r
- }\r
@Override\r
public ITermTreeService getTermTreeService() {\r
return (ITermTreeService) getService(ITermTreeService.class, "/remoting/termtree.service", new AuthenticatingHttpInvokerRequestExecutor());\r
}\r
\r
- @Override\r
- public IFeatureNodeService getFeatureNodeService(){\r
- return (IFeatureNodeService) getService(IFeatureNodeService.class, "/remoting/featurenode.service", new AuthenticatingHttpInvokerRequestExecutor());\r
- }\r
-\r
@Override\r
public ITermNodeService getTermNodeService() {\r
return (ITermNodeService) getService(ITermNodeService.class, "/remoting/termnode.service", new AuthenticatingHttpInvokerRequestExecutor());\r
return (IPolytomousKeyService) getService(IPolytomousKeyService.class, "/remoting/polytomouskey.service", new AuthenticatingHttpInvokerRequestExecutor());\r
}\r
\r
-\r
@Override\r
public IPolytomousKeyNodeService getPolytomousKeyNodeService(){\r
return (IPolytomousKeyNodeService) getService(IPolytomousKeyNodeService.class, "/remoting/polytomouskeynode.service", new AuthenticatingHttpInvokerRequestExecutor());\r
return (IDescriptiveDataSetService) getService(IDescriptiveDataSetService.class, "/remoting/descriptivedataset.service", new AuthenticatingHttpInvokerRequestExecutor());\r
}\r
\r
- /**\r
- * {@inheritDoc}\r
- */\r
@Override\r
public IRegistrationService getRegistrationService() {\r
return (IRegistrationService) getService(IRegistrationService.class, "/remoting/registration.service", new AuthenticatingHttpInvokerRequestExecutor());\r
+ }\r
\r
+ @Override\r
+ public IRegistrationWorkingSetService getRegistrationWorkingSetService() {\r
+ return (IRegistrationWorkingSetService) getService(IRegistrationWorkingSetService.class, "/remoting/registrationworkingset.service", new AuthenticatingHttpInvokerRequestExecutor());\r
}\r
\r
@Override\r
return (IPreferenceService) getService(IPreferenceService.class, "/remoting/preference.service", new AuthenticatingHttpInvokerRequestExecutor());\r
}\r
\r
+ @Override\r
+ public IPasswordResetService getPasswordResetService(){\r
+ return (IPasswordResetService) getService(IPasswordResetService.class, "/remoting/passwordreset.service", new AuthenticatingHttpInvokerRequestExecutor());\r
+ }\r
\r
@Override\r
public IEntityValidationService getEntityValidationService(){\r
return (IEntityValidationService) getService(IEntityValidationService.class, "/remoting/entityvalidation.service", new AuthenticatingHttpInvokerRequestExecutor());\r
}\r
\r
-\r
@Override\r
public IEntityConstraintViolationService getEntityConstraintViolationService(){\r
return (IEntityConstraintViolationService) getService(IEntityConstraintViolationService.class, "/remoting/entityconstraintviolation.service", new AuthenticatingHttpInvokerRequestExecutor());\r
}\r
\r
+ @Override\r
+ public MediaInfoFactory getMediaInfoFactory(){ // TODO use interface\r
+ return (MediaInfoFactory) getService(MediaInfoFactory.class, "/remoting/mediainfofactory.service", new AuthenticatingHttpInvokerRequestExecutor());\r
+ }\r
+\r
@Override\r
public ICdmPermissionEvaluator getPermissionEvaluator(){\r
\r
return cdmPermissionEvaluator;\r
}\r
\r
-\r
- @Override\r
- public TransactionStatus startTransaction() throws UnsupportedOperationException {\r
- throw new UnsupportedOperationException("startTransaction is not implemented for CdmApplicationRemoteConfiguration");\r
- }\r
-\r
- @Override\r
- public TransactionStatus startTransaction(Boolean readOnly) throws UnsupportedOperationException {\r
- throw new UnsupportedOperationException("startTransaction is not implemented for CdmApplicationRemoteConfiguration");\r
- }\r
-\r
-\r
- @Override\r
- public void commitTransaction(TransactionStatus txStatus) throws UnsupportedOperationException {\r
- throw new UnsupportedOperationException("commitTransaction is not implemented for CdmApplicationRemoteConfiguration");\r
- }\r
-\r
- @Override\r
- public void rollbackTransaction(TransactionStatus arg0) {\r
- throw new UnsupportedOperationException("rollbackTransaction is not implemented for CdmApplicationRemoteConfiguration");\r
- }\r
-\r
@Override\r
public void authenticate(String username, String password){\r
UsernamePasswordAuthenticationToken tokenForUser = new UsernamePasswordAuthenticationToken(username, password);\r
public ITestService getTestService() {\r
return (ITestService) getService(ITestService.class, "/remoting/test.service", new AuthenticatingHttpInvokerRequestExecutor());\r
}\r
-\r
}\r