* 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 org.apache.log4j.Logger;\r
-import org.springframework.beans.BeansException;\r
-import org.springframework.context.ApplicationContext;\r
-import org.springframework.context.ApplicationContextAware;\r
+import java.util.ArrayList;\r
+import java.util.Arrays;\r
+import java.util.HashMap;\r
+import java.util.List;\r
+import java.util.Map;\r
+\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.authentication.AuthenticationProvider;\r
import org.springframework.security.authentication.ProviderManager;\r
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;\r
+import org.springframework.security.authentication.dao.DaoAuthenticationProvider;\r
+import org.springframework.security.authentication.dao.ReflectionSaltSource;\r
+import org.springframework.security.authentication.encoding.Md5PasswordEncoder;\r
import org.springframework.security.core.Authentication;\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.IFeatureNodeService;\r
-import eu.etaxonomy.cdm.api.service.IFeatureTreeService;\r
+import eu.etaxonomy.cdm.api.service.IEventBaseService;\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.ILocationService;\r
import eu.etaxonomy.cdm.api.service.IMediaService;\r
+import eu.etaxonomy.cdm.api.service.IMetadataService;\r
import eu.etaxonomy.cdm.api.service.INameService;\r
import eu.etaxonomy.cdm.api.service.IOccurrenceService;\r
import eu.etaxonomy.cdm.api.service.IPolytomousKeyNodeService;\r
import eu.etaxonomy.cdm.api.service.IPolytomousKeyService;\r
+import eu.etaxonomy.cdm.api.service.IPreferenceService;\r
+import eu.etaxonomy.cdm.api.service.IProgressMonitorService;\r
import eu.etaxonomy.cdm.api.service.IReferenceService;\r
-import eu.etaxonomy.cdm.api.service.IService;\r
+import eu.etaxonomy.cdm.api.service.IRegistrationService;\r
+import eu.etaxonomy.cdm.api.service.IRightsService;\r
import eu.etaxonomy.cdm.api.service.ITaxonNodeService;\r
import eu.etaxonomy.cdm.api.service.ITaxonService;\r
+import eu.etaxonomy.cdm.api.service.ITermNodeService;\r
import eu.etaxonomy.cdm.api.service.ITermService;\r
+import eu.etaxonomy.cdm.api.service.ITermTreeService;\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.IWorkingSetService;\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.model.common.CdmBase;\r
-import eu.etaxonomy.cdm.persistence.hibernate.permission.ICdmPermissionEvaluator;\r
+import eu.etaxonomy.cdm.io.service.IIOService;\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.service.ICachedCommonService;\r
+import eu.etaxonomy.taxeditor.service.RemoteInvocationTermCacher;\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
*/\r
@Component\r
-public class CdmApplicationRemoteConfiguration implements ICdmApplicationConfiguration, ApplicationContextAware {\r
+// TODO split into CdmRepository and proper @Configuration class\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
- protected ApplicationContext applicationContext;\r
+ /**\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
+ * 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 = 3000; // 3 seconds\r
\r
+ /**\r
+ * Timeout for normal operation (milliseconds)\r
+ *\r
+ * Infinite time out (value = 0) can cause the application to be stuck in\r
+ * SocketInputStream.read(), Therefore it makes sense to specify a definite\r
+ * timeout which is high enough to allow for longer operations\r
+ * <p>\r
+ * The application should be usable in networks with low connection quality,\r
+ * e.g.: from cuba where the throughput rate is low (<= ISDN speed, 64 kbit)\r
+ * and a packet delay of <200 ms.\r
+ *\r
+ */\r
+ public static final int HTTP_READ_TIMEOUT = 10 * 60 * 1000;\r
\r
- public CdmApplicationRemoteConfiguration() {}\r
+ private ICdmRemoteSource remoteSource;\r
\r
- // ****************************** APPLICATION CONTEXT *************************************************/\r
+ //TODO should be something like Map<Class<IService>, IService>, but we have no common service base interface yet\r
+ private Map<Class<?>, Object> serviceMap = new HashMap<>();\r
\r
- @Override\r
- public void setApplicationContext(ApplicationContext applicationContext) throws BeansException{\r
- this.applicationContext = applicationContext;\r
- }\r
+ private ICdmEntitySessionManager cdmEntitySessionManager;\r
\r
- /* (non-Javadoc)\r
- * @see eu.etaxonomy.cdm.api.application.CdmApplicationDefaultConfiguration#getTransactionManager()\r
- */\r
- @Override\r
- public PlatformTransactionManager getTransactionManager() throws UnsupportedOperationException {\r
- throw new UnsupportedOperationException("getTransactionManager is not implemented for CdmApplicationRemoteConfiguration");\r
- }\r
+ private CdmPermissionEvaluator cdmPermissionEvaluator;\r
\r
+ private ProviderManager authenticationManager;\r
\r
+ private ICachedCommonService cachedCommonService;\r
\r
- /**\r
- * @return\r
- */\r
- public IEditGeoService getEditGeoService() {\r
- return (IEditGeoService)getBean("editGeoService");\r
+ static {\r
+ // The Taxeditor is multithreaded, the same authentication should be used\r
+ // in all threads\r
+ SecurityContextHolder.setStrategyName(SecurityContextHolder.MODE_GLOBAL);\r
}\r
\r
- /**\r
- * @return\r
- */\r
- public ICachedCommonService getCachedCommonService(){\r
- return (ICachedCommonService) getBean("cachedCommonService");\r
+ public CdmApplicationRemoteConfiguration() {}\r
+\r
+ public CdmApplicationRemoteConfiguration(ICdmRemoteSource remoteSource) {\r
+ this.remoteSource = remoteSource;\r
}\r
\r
+ public void setRemoteSource(ICdmRemoteSource remoteSource) {\r
+ this.remoteSource = remoteSource;\r
+ }\r
\r
- public ICdmEntitySessionManager getCdmEntitySessionManager() {\r
- return (ICdmEntitySessionManager) getBean("cdmEntitySessionManager");\r
+ private Object getService(Class<?/* extends IService*/> clazz, String serviceSuffix, HttpComponentsHttpInvokerRequestExecutor executor) {\r
+ if(serviceMap.containsKey(clazz)) {\r
+ return serviceMap.get(clazz);\r
+ }\r
+ Object service = getService(clazz, serviceSuffix, remoteSource, executor);\r
+ serviceMap.put(clazz, service);\r
+ return service;\r
}\r
\r
+ public static Object getService(Class<?> clazz,\r
+ String serviceSuffix,\r
+ ICdmRemoteSource remoteSource,\r
+ HttpComponentsHttpInvokerRequestExecutor executor) {\r
\r
+ String baseUrl;\r
+ String protocol = remoteSource.getPort() == 443 ? "https" : "http";\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()) + "/" + contextPath;\r
+ }\r
+ CachingHttpInvokerProxyFactoryBean proxyFactory = new CachingHttpInvokerProxyFactoryBean();\r
+ proxyFactory.setServiceInterface(clazz);\r
+ proxyFactory.setServiceUrl(baseUrl + serviceSuffix);\r
+ if(executor != null) {\r
+ executor.setReadTimeout(HTTP_READ_TIMEOUT);\r
+ executor.setConnectionRequestTimeout(HTTP_READ_TIMEOUT);\r
+ proxyFactory.setHttpInvokerRequestExecutor(executor);\r
+ }\r
+ if(ITermService.class.isAssignableFrom(clazz)){\r
+ proxyFactory.setRemoteInvocationTermCacher(new RemoteInvocationTermCacher());\r
+ }\r
+ proxyFactory.afterPropertiesSet();\r
+ return proxyFactory.getObject();\r
+ }\r
\r
+ // ****************************** APPLICATION CONTEXT *************************************************/\r
\r
+ public IEditGeoService getEditGeoService() {\r
+ return (IEditGeoService) getService(IEditGeoService.class, "/remoting/editgeo.service", new AuthenticatingHttpInvokerRequestExecutor());\r
+ }\r
+\r
+ public ICachedCommonService getCachedCommonService(){\r
+ if(cachedCommonService == null) {\r
+ cachedCommonService = new CachedCommonServiceImpl();\r
+ }\r
+ return cachedCommonService;\r
+ }\r
+\r
+ public ICdmEntitySessionManager getCdmEntitySessionManager() {\r
+ if(cdmEntitySessionManager == null) {\r
+ cdmEntitySessionManager = new CdmEntitySessionManager();\r
+ }\r
+ return cdmEntitySessionManager;\r
+ }\r
\r
// ****************************** GETTER *************************************************/\r
\r
@Override\r
- public final Object getBean(String name){\r
- return this.applicationContext.getBean(name);\r
+ public IAccountRegistrationService getAccountRegistrationService() {\r
+ return (IAccountRegistrationService) getService(IAccountRegistrationService.class, "/remoting/accountregistrationservice.service", new AuthenticatingHttpInvokerRequestExecutor());\r
}\r
\r
@Override\r
public IAgentService getAgentService(){\r
- return (IAgentService) getBean("agentService");\r
+ return (IAgentService) getService(IAgentService.class, "/remoting/agent.service", new AuthenticatingHttpInvokerRequestExecutor());\r
+ }\r
+\r
+ @Override\r
+ public IAnnotationService getAnnotationService(){\r
+ return (IAnnotationService) getService(IAnnotationService.class, "/remoting/annotation.service", new AuthenticatingHttpInvokerRequestExecutor());\r
}\r
\r
@Override\r
public IDatabaseService getDatabaseService(){\r
- return (IDatabaseService) getBean("databaseService");\r
+ return (IDatabaseService) getService(IDatabaseService.class, "/remoting/database.service", new AuthenticatingHttpInvokerRequestExecutor());\r
}\r
\r
@Override\r
public INameService getNameService(){\r
- return (INameService) getBean("nameService");\r
+ return (INameService) getService(INameService.class, "/remoting/name.service", new AuthenticatingHttpInvokerRequestExecutor());\r
}\r
\r
@Override\r
public IReferenceService getReferenceService(){\r
- return (IReferenceService) getBean("referenceService");\r
+ return (IReferenceService) getService(IReferenceService.class, "/remoting/reference.service", new AuthenticatingHttpInvokerRequestExecutor());\r
}\r
\r
@Override\r
public ITaxonService getTaxonService(){\r
- return (ITaxonService) getBean("taxonService");\r
+ return (ITaxonService) getService(ITaxonService.class, "/remoting/taxon.service", new AuthenticatingHttpInvokerRequestExecutor());\r
}\r
\r
@Override\r
public IClassificationService getClassificationService(){\r
- return (IClassificationService) getBean("classificationService");\r
+ return (IClassificationService) getService(IClassificationService.class, "/remoting/classification.service", new AuthenticatingHttpInvokerRequestExecutor());\r
}\r
\r
@Override\r
public ITaxonNodeService getTaxonNodeService(){\r
- return (ITaxonNodeService) getBean("taxonNodeService");\r
+ return (ITaxonNodeService) getService(ITaxonNodeService.class, "/remoting/taxonnode.service", new AuthenticatingHttpInvokerRequestExecutor());\r
}\r
\r
@Override\r
public IDescriptionService getDescriptionService(){\r
- return (IDescriptionService) getBean("descriptionService");\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) getBean("occurrenceService");\r
+ return (IOccurrenceService) getService(IOccurrenceService.class, "/remoting/occurrence.service", new AuthenticatingHttpInvokerRequestExecutor());\r
}\r
\r
@Override\r
public IPrimerService getPrimerService(){\r
- return (IPrimerService) getBean("primerService");\r
+ return (IPrimerService) getService(IPrimerService.class, "/remoting/primer.service", new AuthenticatingHttpInvokerRequestExecutor());\r
}\r
\r
@Override\r
public IAmplificationService getAmplificationService(){\r
- return (IAmplificationService) getBean("amplificationService");\r
+ return (IAmplificationService) getService(IAmplificationService.class, "/remoting/amplification.service", new AuthenticatingHttpInvokerRequestExecutor());\r
}\r
\r
@Override\r
public ISequenceService getSequenceService(){\r
- return (ISequenceService) getBean("sequenceService");\r
+ return (ISequenceService) getService(ISequenceService.class, "/remoting/sequence.service", new AuthenticatingHttpInvokerRequestExecutor());\r
+ }\r
+\r
+ @Override\r
+ public IEventBaseService getEventBaseService() {\r
+ return (IEventBaseService) getService(IEventBaseService.class, "/remoting/eventbase.service", new AuthenticatingHttpInvokerRequestExecutor());\r
}\r
\r
@Override\r
public IMediaService getMediaService(){\r
- return (IMediaService) getBean("mediaService");\r
+ return (IMediaService) getService(IMediaService.class, "/remoting/media.service", new AuthenticatingHttpInvokerRequestExecutor());\r
}\r
\r
@Override\r
public ITermService getTermService(){\r
- return (ITermService) getBean("termService");\r
+ return (ITermService) getService(ITermService.class, "/remoting/term.service", new AuthenticatingHttpInvokerRequestExecutor());\r
+ }\r
+\r
+ @Override\r
+ public IRightsService getRightsService(){\r
+ return (IRightsService) getService(IRightsService.class, "/remoting/rights.service", new AuthenticatingHttpInvokerRequestExecutor());\r
}\r
\r
@Override\r
public ICommonService getCommonService(){\r
- return (ICommonService) getBean("commonService");\r
+ return (ICommonService) getService(ICommonService.class, "/remoting/common.service", new AuthenticatingHttpInvokerRequestExecutor());\r
}\r
\r
@Override\r
public ILocationService getLocationService(){\r
- return (ILocationService) getBean("locationService");\r
+ return (ILocationService) getService(ILocationService.class, "/remoting/location.service", new AuthenticatingHttpInvokerRequestExecutor());\r
}\r
\r
@Override\r
public IUserService getUserService(){\r
- return (IUserService) getBean("userService");\r
+ return (IUserService) getService(IUserService.class, "/remoting-public/user.service", new AuthenticatingHttpInvokerRequestExecutor());\r
}\r
\r
- @Override\r
- public IGrantedAuthorityService getGrantedAuthorityService(){\r
- return (IGrantedAuthorityService) getBean("grantedAuthorityService");\r
+ public static IUserService getUserService(ICdmRemoteSource remoteSource) {\r
+ return (IUserService) getService(IUserService.class, "/remoting-public/user.service", remoteSource, new HttpComponentsHttpInvokerRequestExecutor());\r
}\r
\r
@Override\r
- public IService<CdmBase> getMainService(){\r
- return (IService<CdmBase>) getBean("mainService");\r
+ public IMetadataService getMetadataService() {\r
+ return (IMetadataService) getService(IMetadataService.class, "/remoting-public/metadata.service", new HttpComponentsHttpInvokerRequestExecutor());\r
}\r
\r
+ public static IMetadataService getMetadataService(ICdmRemoteSource remoteSource) {\r
+ return (IMetadataService) getService(IMetadataService.class, "/remoting-public/metadata.service", remoteSource, new HttpComponentsHttpInvokerRequestExecutor());\r
+ }\r
+\r
+ @Override\r
+ public IGrantedAuthorityService getGrantedAuthorityService(){\r
+ return (IGrantedAuthorityService) getService(IGrantedAuthorityService.class, "/remoting/grantedauthority.service", new AuthenticatingHttpInvokerRequestExecutor());\r
+ }\r
\r
@Override\r
public ProviderManager getAuthenticationManager(){\r
- return (ProviderManager) getBean("authenticationManager");\r
+ if(authenticationManager == null) {\r
+ authenticationManager = getAuthenticationManager(getUserService());\r
+ }\r
+ return authenticationManager;\r
}\r
\r
+ public static ProviderManager getAuthenticationManager(IUserService userService) {\r
+ Md5PasswordEncoder passwordEncoder = new Md5PasswordEncoder();\r
+ ReflectionSaltSource saltSource = new ReflectionSaltSource();\r
+ saltSource.setUserPropertyToUse("getUsername");\r
\r
- @Override\r
- public ConversationHolder NewConversation() {\r
- return new ConversationHolderMock();\r
+ DaoAuthenticationProvider daoAuthenticationProvider = new DaoAuthenticationProvider();\r
+ daoAuthenticationProvider.setUserDetailsService(userService);\r
+ daoAuthenticationProvider.setSaltSource(saltSource);\r
+ daoAuthenticationProvider.setPasswordEncoder(passwordEncoder);\r
+\r
+ return new ProviderManager(Arrays.asList((AuthenticationProvider)daoAuthenticationProvider));\r
}\r
\r
@Override\r
public ICollectionService getCollectionService(){\r
- return (ICollectionService) getBean("collectionService");\r
+ return (ICollectionService) getService(ICollectionService.class, "/remoting/collection.service", new AuthenticatingHttpInvokerRequestExecutor());\r
}\r
\r
@Override\r
- public IFeatureTreeService getFeatureTreeService(){\r
- return (IFeatureTreeService) getBean("featureTreeService");\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) getBean("featureNodeService");\r
- }\r
+ @Override\r
+ public ITermNodeService getTermNodeService() {\r
+ return (ITermNodeService) getService(ITermNodeService.class, "/remoting/termnode.service", new AuthenticatingHttpInvokerRequestExecutor());\r
+ }\r
\r
@Override\r
public IVocabularyService getVocabularyService(){\r
- return (IVocabularyService) getBean("vocabularyService");\r
+ return (IVocabularyService) getService(IVocabularyService.class, "/remoting/vocabulary.service", new AuthenticatingHttpInvokerRequestExecutor());\r
}\r
\r
@Override\r
public IIdentificationKeyService getIdentificationKeyService(){\r
- return (IIdentificationKeyService) getBean("identificationKeyService");\r
+ return (IIdentificationKeyService) getService(IIdentificationKeyService.class, "/remoting/identificationkey.service", new AuthenticatingHttpInvokerRequestExecutor());\r
}\r
\r
@Override\r
public IPolytomousKeyService getPolytomousKeyService(){\r
- return (IPolytomousKeyService) getBean("polytomousKeyService");\r
+ return (IPolytomousKeyService) getService(IPolytomousKeyService.class, "/remoting/polytomouskey.service", new AuthenticatingHttpInvokerRequestExecutor());\r
}\r
\r
-\r
@Override\r
public IPolytomousKeyNodeService getPolytomousKeyNodeService(){\r
- return (IPolytomousKeyNodeService) getBean("polytomousKeyNodeService");\r
+ return (IPolytomousKeyNodeService) getService(IPolytomousKeyNodeService.class, "/remoting/polytomouskeynode.service", new AuthenticatingHttpInvokerRequestExecutor());\r
}\r
\r
@Override\r
- public IWorkingSetService getWorkingSetService(){\r
- return (IWorkingSetService) getBean("workingSetService");\r
+ public IProgressMonitorService getProgressMonitorService() {\r
+ return (IProgressMonitorService) getService(IProgressMonitorService.class, "/remoting/progressmonitor.service", new AuthenticatingHttpInvokerRequestExecutor());\r
}\r
\r
@Override\r
- public IGroupService getGroupService(){\r
- return (IGroupService) getBean("groupService");\r
+ public IDescriptiveDataSetService getDescriptiveDataSetService(){\r
+ return (IDescriptiveDataSetService) getService(IDescriptiveDataSetService.class, "/remoting/descriptivedataset.service", new AuthenticatingHttpInvokerRequestExecutor());\r
}\r
\r
-\r
@Override\r
- public IEntityValidationService getEntityValidationService(){\r
- return (IEntityValidationService) getBean("entityValidationService");\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
- public IEntityConstraintViolationService getEntityConstraintViolationService(){\r
- return (IEntityConstraintViolationService) getBean("entityConstraintViolationService");\r
+ public IGroupService getGroupService(){\r
+ return (IGroupService) getService(IGroupService.class, "/remoting/group.service", new AuthenticatingHttpInvokerRequestExecutor());\r
}\r
\r
@Override\r
- public ICdmPermissionEvaluator getPermissionEvaluator(){\r
- return (ICdmPermissionEvaluator) getBean("cdmPermissionEvaluator");\r
+ public IPreferenceService getPreferenceService(){\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 TransactionStatus startTransaction() throws UnsupportedOperationException {\r
- throw new UnsupportedOperationException("startTransaction is not implemented for CdmApplicationRemoteConfiguration");\r
+ public IEntityValidationService getEntityValidationService(){\r
+ return (IEntityValidationService) getService(IEntityValidationService.class, "/remoting/entityvalidation.service", new AuthenticatingHttpInvokerRequestExecutor());\r
}\r
\r
@Override\r
- public TransactionStatus startTransaction(Boolean readOnly) throws UnsupportedOperationException {\r
- throw new UnsupportedOperationException("startTransaction is not implemented for CdmApplicationRemoteConfiguration");\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 void commitTransaction(TransactionStatus txStatus) throws UnsupportedOperationException {\r
- throw new UnsupportedOperationException("commitTransaction is not implemented for CdmApplicationRemoteConfiguration");\r
+ public ICdmPermissionEvaluator getPermissionEvaluator(){\r
+\r
+ if(cdmPermissionEvaluator != null) {\r
+ return cdmPermissionEvaluator;\r
+ }\r
+ List<AccessDecisionVoter<? extends Object>> decisionVoters = new ArrayList<>();\r
+ decisionVoters.add(new GrantAlwaysVoter());\r
+ decisionVoters.add(new TaxonNodeVoter());\r
+ decisionVoters.add(new TaxonBaseVoter());\r
+ decisionVoters.add(new DescriptionBaseVoter());\r
+ decisionVoters.add(new DescriptionElementVoter());\r
+ UnanimousBasedUnrevokable accessDecisionManager = new UnanimousBasedUnrevokable(decisionVoters);\r
+\r
+ cdmPermissionEvaluator = new CdmPermissionEvaluator();\r
+ cdmPermissionEvaluator.setAccessDecisionManager(accessDecisionManager);\r
+\r
+ return cdmPermissionEvaluator;\r
}\r
\r
@Override\r
SecurityContext context = SecurityContextHolder.getContext();\r
context.setAuthentication(authentication);\r
}\r
+\r
+ public IIOService getIOService() {\r
+ return (IIOService) getService(IIOService.class, "/remoting/io.service", new AuthenticatingHttpInvokerRequestExecutor());\r
+ }\r
+\r
+ @Override\r
+ public ILongRunningTasksService getLongRunningTasksService() {\r
+ return (ILongRunningTasksService) getService(ILongRunningTasksService.class, "/remoting/longrunningtasks.service", new AuthenticatingHttpInvokerRequestExecutor());\r
+ }\r
+\r
+ public ITestService getTestService() {\r
+ return (ITestService) getService(ITestService.class, "/remoting/test.service", new AuthenticatingHttpInvokerRequestExecutor());\r
+ }\r
}\r