X-Git-Url: https://dev.e-taxonomy.eu/gitweb/taxeditor.git/blobdiff_plain/5a87d22140f942c5992d124028ef900d40baf14c..ec07654300339a54a3d7bbff703b369b47ab3c7f:/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/cdm/api/application/CdmApplicationRemoteConfiguration.java?ds=sidebyside diff --git a/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/cdm/api/application/CdmApplicationRemoteConfiguration.java b/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/cdm/api/application/CdmApplicationRemoteConfiguration.java index 77bcb1e8b..4bc14613d 100644 --- a/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/cdm/api/application/CdmApplicationRemoteConfiguration.java +++ b/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/cdm/api/application/CdmApplicationRemoteConfiguration.java @@ -6,7 +6,6 @@ * The contents of this file are subject to the Mozilla Public License Version 1.1 * See LICENSE.TXT at the top of this package for the full license terms. */ - package eu.etaxonomy.cdm.api.application; import java.util.ArrayList; @@ -15,10 +14,9 @@ import java.util.HashMap; import java.util.List; import java.util.Map; -import org.apache.log4j.Logger; -import org.springframework.beans.BeansException; -import org.springframework.context.ApplicationContext; -import org.springframework.context.ApplicationContextAware; +import org.apache.commons.lang3.StringUtils; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; import org.springframework.remoting.httpinvoker.CachingHttpInvokerProxyFactoryBean; import org.springframework.remoting.httpinvoker.HttpComponentsHttpInvokerRequestExecutor; import org.springframework.security.access.AccessDecisionVoter; @@ -32,24 +30,19 @@ import org.springframework.security.core.Authentication; import org.springframework.security.core.context.SecurityContext; import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.stereotype.Component; -import org.springframework.transaction.PlatformTransactionManager; -import org.springframework.transaction.TransactionStatus; -import eu.etaxonomy.cdm.api.conversation.ConversationHolder; -import eu.etaxonomy.cdm.api.conversation.ConversationHolderMock; import eu.etaxonomy.cdm.api.service.IAgentService; import eu.etaxonomy.cdm.api.service.IAnnotationService; import eu.etaxonomy.cdm.api.service.IClassificationService; import eu.etaxonomy.cdm.api.service.ICollectionService; import eu.etaxonomy.cdm.api.service.ICommonService; import eu.etaxonomy.cdm.api.service.IDatabaseService; +import eu.etaxonomy.cdm.api.service.IDescriptionElementService; import eu.etaxonomy.cdm.api.service.IDescriptionService; import eu.etaxonomy.cdm.api.service.IDescriptiveDataSetService; import eu.etaxonomy.cdm.api.service.IEntityConstraintViolationService; import eu.etaxonomy.cdm.api.service.IEntityValidationService; import eu.etaxonomy.cdm.api.service.IEventBaseService; -import eu.etaxonomy.cdm.api.service.IFeatureNodeService; -import eu.etaxonomy.cdm.api.service.IFeatureTreeService; import eu.etaxonomy.cdm.api.service.IGrantedAuthorityService; import eu.etaxonomy.cdm.api.service.IGroupService; import eu.etaxonomy.cdm.api.service.IIdentificationKeyService; @@ -73,20 +66,26 @@ import eu.etaxonomy.cdm.api.service.ITermTreeService; import eu.etaxonomy.cdm.api.service.ITestService; import eu.etaxonomy.cdm.api.service.IUserService; import eu.etaxonomy.cdm.api.service.IVocabularyService; +import eu.etaxonomy.cdm.api.service.geo.IDistributionService; import eu.etaxonomy.cdm.api.service.longrunningService.ILongRunningTasksService; +import eu.etaxonomy.cdm.api.service.media.MediaInfoFactory; import eu.etaxonomy.cdm.api.service.molecular.IAmplificationService; import eu.etaxonomy.cdm.api.service.molecular.IPrimerService; import eu.etaxonomy.cdm.api.service.molecular.ISequenceService; +import eu.etaxonomy.cdm.api.service.registration.IRegistrationWorkingSetService; +import eu.etaxonomy.cdm.api.service.security.IAccountRegistrationService; +import eu.etaxonomy.cdm.api.service.security.IPasswordResetService; import eu.etaxonomy.cdm.ext.geo.IEditGeoService; import eu.etaxonomy.cdm.io.service.IIOService; -import eu.etaxonomy.cdm.persistence.hibernate.permission.CdmPermissionEvaluator; -import eu.etaxonomy.cdm.persistence.hibernate.permission.ICdmPermissionEvaluator; -import eu.etaxonomy.cdm.persistence.hibernate.permission.UnanimousBasedUnrevokable; -import eu.etaxonomy.cdm.persistence.hibernate.permission.voter.DescriptionBaseVoter; -import eu.etaxonomy.cdm.persistence.hibernate.permission.voter.DescriptionElementVoter; -import eu.etaxonomy.cdm.persistence.hibernate.permission.voter.GrantAlwaysVoter; -import eu.etaxonomy.cdm.persistence.hibernate.permission.voter.TaxonBaseVoter; -import eu.etaxonomy.cdm.persistence.hibernate.permission.voter.TaxonNodeVoter; +import eu.etaxonomy.cdm.persistence.permission.CdmPermissionEvaluator; +import eu.etaxonomy.cdm.persistence.permission.ICdmPermissionEvaluator; +import eu.etaxonomy.cdm.persistence.permission.UnanimousBasedUnrevokable; +import eu.etaxonomy.cdm.persistence.permission.voter.DescriptionBaseVoter; +import eu.etaxonomy.cdm.persistence.permission.voter.DescriptionElementVoter; +import eu.etaxonomy.cdm.persistence.permission.voter.GrantAlwaysVoter; +import eu.etaxonomy.cdm.persistence.permission.voter.TaxonBaseVoter; +import eu.etaxonomy.cdm.persistence.permission.voter.TaxonNodeVoter; +import eu.etaxonomy.taxeditor.remoting.source.CdmRemoteSource; import eu.etaxonomy.taxeditor.remoting.source.ICdmRemoteSource; import eu.etaxonomy.taxeditor.service.AuthenticatingHttpInvokerRequestExecutor; import eu.etaxonomy.taxeditor.service.CachedCommonServiceImpl; @@ -95,25 +94,27 @@ import eu.etaxonomy.taxeditor.service.RemoteInvocationTermCacher; import eu.etaxonomy.taxeditor.session.CdmEntitySessionManager; import eu.etaxonomy.taxeditor.session.ICdmEntitySessionManager; - /** * CDM Application Configuration class which manages the configuration for remoting * clients */ @Component // TODO split into CdmRepository and proper @Configuration class -public class CdmApplicationRemoteConfiguration implements ICdmRepository, ApplicationContextAware { +public class CdmApplicationRemoteConfiguration implements ICdmRepository { @SuppressWarnings("unused") - private static final Logger logger = Logger.getLogger(CdmApplicationRemoteConfiguration.class); + private static final Logger logger = LogManager.getLogger(); /** - * Timeout for service lookup etc. This timeout (milliseconds) should me more + * Timeout for service lookup etc. This timeout (milliseconds) should be more * strict than {@link #HTTP_READ_TIMEOUT} to avoid connecting to * cdm servers when the network quality is too bad. - * + * Note AM: IMO we should not be to strict, sometimes services do not respond too fast + * during the first call (e.g. test server), therefore I put this up from 1 to 3 sec. + * Better we should inform the user that the connection might be of low quality + * instead of making the connection completely unavailable. */ - public static final int HTTP_READ_TIMEOUT_MIN = 1000; // one minute + public static final int HTTP_READ_TIMEOUT_MIN = 3000; // 3 seconds /** * Timeout for normal operation (milliseconds) @@ -124,18 +125,10 @@ public class CdmApplicationRemoteConfiguration implements ICdmRepository, Applic *

* The application should be usable in networks with low connection quality, * e.g.: from cuba where the throughput rate is low (<= ISDN speed, 64 kbit) - * and a packet delay of <200 ms. Additionally we should tolerate a certain - * amount of packet loss. Here we take the packet loss rate as it occurs - * in the FU-Berlin ZEDAT VPN as reference case (~1%) - *

+ * and a packet delay of <200 ms. * */ - public static final int HTTP_READ_TIMEOUT = 70000; - - - protected ApplicationContext applicationContext; + public static final int HTTP_READ_TIMEOUT = 10 * 60 * 1000; private ICdmRemoteSource remoteSource; @@ -160,7 +153,6 @@ public class CdmApplicationRemoteConfiguration implements ICdmRepository, Applic public CdmApplicationRemoteConfiguration(ICdmRemoteSource remoteSource) { this.remoteSource = remoteSource; - } public void setRemoteSource(ICdmRemoteSource remoteSource) { @@ -182,10 +174,13 @@ public class CdmApplicationRemoteConfiguration implements ICdmRepository, Applic HttpComponentsHttpInvokerRequestExecutor executor) { String baseUrl; - if(remoteSource.getContextPath() == null || remoteSource.getContextPath().equals("")) { - baseUrl = "http://" + remoteSource.getServer() + ":" + String.valueOf(remoteSource.getPort()); + String protocol = remoteSource.getPort() == 443 ? "https" : "http"; + + String contextPath = (remoteSource instanceof CdmRemoteSource)? ((CdmRemoteSource)remoteSource).getContextPath() : ""; + if(StringUtils.isBlank(contextPath)) { + baseUrl = protocol + "://" + remoteSource.getServer() + ":" + String.valueOf(remoteSource.getPort()); } else { - baseUrl = "http://" + remoteSource.getServer() + ":" + String.valueOf(remoteSource.getPort()) + "/" + remoteSource.getContextPath(); + baseUrl = protocol + "://" + remoteSource.getServer() + ":" + String.valueOf(remoteSource.getPort()) + "/" + contextPath; } CachingHttpInvokerProxyFactoryBean proxyFactory = new CachingHttpInvokerProxyFactoryBean(); proxyFactory.setServiceInterface(clazz); @@ -204,16 +199,6 @@ public class CdmApplicationRemoteConfiguration implements ICdmRepository, Applic // ****************************** APPLICATION CONTEXT *************************************************/ - @Override - public void setApplicationContext(ApplicationContext applicationContext) throws BeansException{ - this.applicationContext = applicationContext; - } - - @Override - public PlatformTransactionManager getTransactionManager() throws UnsupportedOperationException { - throw new UnsupportedOperationException("getTransactionManager is not implemented for CdmApplicationRemoteConfiguration"); - } - public IEditGeoService getEditGeoService() { return (IEditGeoService) getService(IEditGeoService.class, "/remoting/editgeo.service", new AuthenticatingHttpInvokerRequestExecutor()); } @@ -235,8 +220,8 @@ public class CdmApplicationRemoteConfiguration implements ICdmRepository, Applic // ****************************** GETTER *************************************************/ @Override - public final Object getBean(String name){ - throw new UnsupportedOperationException("getBean is not implemented for CdmApplicationRemoteConfiguration"); + public IAccountRegistrationService getAccountRegistrationService() { + return (IAccountRegistrationService) getService(IAccountRegistrationService.class, "/remoting/accountregistrationservice.service", new AuthenticatingHttpInvokerRequestExecutor()); } @Override @@ -284,6 +269,16 @@ public class CdmApplicationRemoteConfiguration implements ICdmRepository, Applic return (IDescriptionService) getService(IDescriptionService.class, "/remoting/description.service", new AuthenticatingHttpInvokerRequestExecutor()); } + @Override + public IDistributionService getDistributionService(){ + return (IDistributionService) getService(IDistributionService.class, "/remoting/distribution.service", new AuthenticatingHttpInvokerRequestExecutor()); + } + + @Override + public IDescriptionElementService getDescriptionElementService(){ + return (IDescriptionElementService) getService(IDescriptionElementService.class, "/remoting/descriptionelement.service", new AuthenticatingHttpInvokerRequestExecutor()); + } + @Override public IOccurrenceService getOccurrenceService(){ return (IOccurrenceService) getService(IOccurrenceService.class, "/remoting/occurrence.service", new AuthenticatingHttpInvokerRequestExecutor()); @@ -339,7 +334,6 @@ public class CdmApplicationRemoteConfiguration implements ICdmRepository, Applic return (IUserService) getService(IUserService.class, "/remoting-public/user.service", new AuthenticatingHttpInvokerRequestExecutor()); } - public static IUserService getUserService(ICdmRemoteSource remoteSource) { return (IUserService) getService(IUserService.class, "/remoting-public/user.service", remoteSource, new HttpComponentsHttpInvokerRequestExecutor()); } @@ -358,7 +352,6 @@ public class CdmApplicationRemoteConfiguration implements ICdmRepository, Applic return (IGrantedAuthorityService) getService(IGrantedAuthorityService.class, "/remoting/grantedauthority.service", new AuthenticatingHttpInvokerRequestExecutor()); } - @Override public ProviderManager getAuthenticationManager(){ if(authenticationManager == null) { @@ -380,31 +373,16 @@ public class CdmApplicationRemoteConfiguration implements ICdmRepository, Applic return new ProviderManager(Arrays.asList((AuthenticationProvider)daoAuthenticationProvider)); } - - @Override - public ConversationHolder NewConversation() { - return new ConversationHolderMock(); - } - @Override public ICollectionService getCollectionService(){ return (ICollectionService) getService(ICollectionService.class, "/remoting/collection.service", new AuthenticatingHttpInvokerRequestExecutor()); } - @Override - public IFeatureTreeService getFeatureTreeService(){ - return (IFeatureTreeService) getService(IFeatureTreeService.class, "/remoting/featuretree.service", new AuthenticatingHttpInvokerRequestExecutor()); - } @Override public ITermTreeService getTermTreeService() { return (ITermTreeService) getService(ITermTreeService.class, "/remoting/termtree.service", new AuthenticatingHttpInvokerRequestExecutor()); } - @Override - public IFeatureNodeService getFeatureNodeService(){ - return (IFeatureNodeService) getService(IFeatureNodeService.class, "/remoting/featurenode.service", new AuthenticatingHttpInvokerRequestExecutor()); - } - @Override public ITermNodeService getTermNodeService() { return (ITermNodeService) getService(ITermNodeService.class, "/remoting/termnode.service", new AuthenticatingHttpInvokerRequestExecutor()); @@ -425,7 +403,6 @@ public class CdmApplicationRemoteConfiguration implements ICdmRepository, Applic return (IPolytomousKeyService) getService(IPolytomousKeyService.class, "/remoting/polytomouskey.service", new AuthenticatingHttpInvokerRequestExecutor()); } - @Override public IPolytomousKeyNodeService getPolytomousKeyNodeService(){ return (IPolytomousKeyNodeService) getService(IPolytomousKeyNodeService.class, "/remoting/polytomouskeynode.service", new AuthenticatingHttpInvokerRequestExecutor()); @@ -441,13 +418,14 @@ public class CdmApplicationRemoteConfiguration implements ICdmRepository, Applic return (IDescriptiveDataSetService) getService(IDescriptiveDataSetService.class, "/remoting/descriptivedataset.service", new AuthenticatingHttpInvokerRequestExecutor()); } - /** - * {@inheritDoc} - */ @Override public IRegistrationService getRegistrationService() { return (IRegistrationService) getService(IRegistrationService.class, "/remoting/registration.service", new AuthenticatingHttpInvokerRequestExecutor()); + } + @Override + public IRegistrationWorkingSetService getRegistrationWorkingSetService() { + return (IRegistrationWorkingSetService) getService(IRegistrationWorkingSetService.class, "/remoting/registrationworkingset.service", new AuthenticatingHttpInvokerRequestExecutor()); } @Override @@ -460,18 +438,26 @@ public class CdmApplicationRemoteConfiguration implements ICdmRepository, Applic return (IPreferenceService) getService(IPreferenceService.class, "/remoting/preference.service", new AuthenticatingHttpInvokerRequestExecutor()); } + @Override + public IPasswordResetService getPasswordResetService(){ + return (IPasswordResetService) getService(IPasswordResetService.class, "/remoting/passwordreset.service", new AuthenticatingHttpInvokerRequestExecutor()); + } @Override public IEntityValidationService getEntityValidationService(){ return (IEntityValidationService) getService(IEntityValidationService.class, "/remoting/entityvalidation.service", new AuthenticatingHttpInvokerRequestExecutor()); } - @Override public IEntityConstraintViolationService getEntityConstraintViolationService(){ return (IEntityConstraintViolationService) getService(IEntityConstraintViolationService.class, "/remoting/entityconstraintviolation.service", new AuthenticatingHttpInvokerRequestExecutor()); } + @Override + public MediaInfoFactory getMediaInfoFactory(){ // TODO use interface + return (MediaInfoFactory) getService(MediaInfoFactory.class, "/remoting/mediainfofactory.service", new AuthenticatingHttpInvokerRequestExecutor()); + } + @Override public ICdmPermissionEvaluator getPermissionEvaluator(){ @@ -492,28 +478,6 @@ public class CdmApplicationRemoteConfiguration implements ICdmRepository, Applic return cdmPermissionEvaluator; } - - @Override - public TransactionStatus startTransaction() throws UnsupportedOperationException { - throw new UnsupportedOperationException("startTransaction is not implemented for CdmApplicationRemoteConfiguration"); - } - - @Override - public TransactionStatus startTransaction(Boolean readOnly) throws UnsupportedOperationException { - throw new UnsupportedOperationException("startTransaction is not implemented for CdmApplicationRemoteConfiguration"); - } - - - @Override - public void commitTransaction(TransactionStatus txStatus) throws UnsupportedOperationException { - throw new UnsupportedOperationException("commitTransaction is not implemented for CdmApplicationRemoteConfiguration"); - } - - @Override - public void rollbackTransaction(TransactionStatus arg0) { - throw new UnsupportedOperationException("rollbackTransaction is not implemented for CdmApplicationRemoteConfiguration"); - } - @Override public void authenticate(String username, String password){ UsernamePasswordAuthenticationToken tokenForUser = new UsernamePasswordAuthenticationToken(username, password); @@ -534,5 +498,4 @@ public class CdmApplicationRemoteConfiguration implements ICdmRepository, Applic public ITestService getTestService() { return (ITestService) getService(ITestService.class, "/remoting/test.service", new AuthenticatingHttpInvokerRequestExecutor()); } - }