\r
package eu.etaxonomy.cdm.api.application;\r
\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.log4j.Logger;\r
import org.springframework.beans.BeansException;\r
import org.springframework.context.ApplicationContext;\r
import org.springframework.context.ApplicationContextAware;\r
+import org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean;\r
+import org.springframework.remoting.httpinvoker.HttpInvokerRequestExecutor;\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 eu.etaxonomy.cdm.api.service.ITaxonNodeService;\r
import eu.etaxonomy.cdm.api.service.ITaxonService;\r
import eu.etaxonomy.cdm.api.service.ITermService;\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.molecular.IPrimerService;\r
import eu.etaxonomy.cdm.api.service.molecular.ISequenceService;\r
import eu.etaxonomy.cdm.ext.geo.IEditGeoService;\r
+import eu.etaxonomy.cdm.io.service.IIOService;\r
import eu.etaxonomy.cdm.model.common.CdmBase;\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.taxeditor.remoting.source.ICdmRemoteSource;\r
+import eu.etaxonomy.taxeditor.service.CachedCommonServiceImpl;\r
+import eu.etaxonomy.taxeditor.service.CdmServiceRequestExecutor;\r
import eu.etaxonomy.taxeditor.service.ICachedCommonService;\r
+import eu.etaxonomy.taxeditor.service.TermServiceRequestExecutor;\r
+import eu.etaxonomy.taxeditor.session.CdmEntitySessionManager;\r
import eu.etaxonomy.taxeditor.session.ICdmEntitySessionManager;\r
\r
\r
\r
protected ApplicationContext applicationContext;\r
\r
+ private ICdmRemoteSource remoteSource;\r
+\r
+ private Map serviceMap = new HashMap<Class<IService>, IService>();\r
+\r
+ private ICdmEntitySessionManager cdmEntitySessionManager;\r
+\r
+ private CdmPermissionEvaluator cdmPermissionEvaluator;\r
+\r
+ private ProviderManager authenticationManager;\r
+\r
+ private ICachedCommonService cachedCommonService;\r
\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
+ private Object getService(Class<?> clazz, String serviceSuffix, HttpInvokerRequestExecutor executor) {\r
+ if(serviceMap.containsKey(clazz)) {\r
+ return serviceMap.get(clazz);\r
+ }\r
+ String baseUrl;\r
+ if(remoteSource.getContextPath() == null || remoteSource.getContextPath().equals("")) {\r
+ baseUrl = "http://" + remoteSource.getServer() + ":" + String.valueOf(remoteSource.getPort());\r
+ } else {\r
+ baseUrl = "http://" + remoteSource.getServer() + ":" + String.valueOf(remoteSource.getPort()) + "/" + remoteSource.getContextPath();\r
+ }\r
+ HttpInvokerProxyFactoryBean proxy = new HttpInvokerProxyFactoryBean();\r
+ proxy.setServiceInterface(clazz);\r
+ proxy.setServiceUrl(baseUrl + serviceSuffix);\r
+ if(executor != null) {\r
+ proxy.setHttpInvokerRequestExecutor(executor);\r
+ }\r
+ proxy.afterPropertiesSet();\r
+ Object service = proxy.getObject();\r
+ serviceMap.put(clazz, service);\r
+ return service;\r
+ }\r
+\r
// ****************************** APPLICATION CONTEXT *************************************************/\r
\r
@Override\r
* @return\r
*/\r
public IEditGeoService getEditGeoService() {\r
- return (IEditGeoService)getBean("editGeoService");\r
+ return (IEditGeoService) getService(IEditGeoService.class, "/remoting/editgeo.service", new CdmServiceRequestExecutor());\r
}\r
\r
/**\r
* @return\r
*/\r
public ICachedCommonService getCachedCommonService(){\r
- return (ICachedCommonService) getBean("cachedCommonService");\r
+ if(cachedCommonService == null) {\r
+ cachedCommonService = new CachedCommonServiceImpl();\r
+ }\r
+ return cachedCommonService;\r
}\r
\r
\r
public ICdmEntitySessionManager getCdmEntitySessionManager() {\r
- return (ICdmEntitySessionManager) getBean("cdmEntitySessionManager");\r
+ if(cdmEntitySessionManager == null) {\r
+ cdmEntitySessionManager = new CdmEntitySessionManager();\r
+ }\r
+ return cdmEntitySessionManager;\r
}\r
\r
\r
\r
@Override\r
public final Object getBean(String name){\r
- return this.applicationContext.getBean(name);\r
+ throw new UnsupportedOperationException("getBean is not implemented for CdmApplicationRemoteConfiguration");\r
}\r
\r
@Override\r
public IAgentService getAgentService(){\r
- return (IAgentService) getBean("agentService");\r
+ return (IAgentService) getService(IAgentService.class, "/remoting/agent.service", new CdmServiceRequestExecutor());\r
}\r
\r
@Override\r
public IDatabaseService getDatabaseService(){\r
- return (IDatabaseService) getBean("databaseService");\r
+ return (IDatabaseService) getService(IDatabaseService.class, "/remoting/database.service", new CdmServiceRequestExecutor());\r
}\r
\r
@Override\r
public INameService getNameService(){\r
- return (INameService) getBean("nameService");\r
+ return (INameService) getService(INameService.class, "/remoting/name.service", new CdmServiceRequestExecutor());\r
}\r
\r
@Override\r
public IReferenceService getReferenceService(){\r
- return (IReferenceService) getBean("referenceService");\r
+ return (IReferenceService) getService(IReferenceService.class, "/remoting/reference.service", new CdmServiceRequestExecutor());\r
}\r
\r
@Override\r
public ITaxonService getTaxonService(){\r
- return (ITaxonService) getBean("taxonService");\r
+ return (ITaxonService) getService(ITaxonService.class, "/remoting/taxon.service", new CdmServiceRequestExecutor());\r
}\r
\r
@Override\r
public IClassificationService getClassificationService(){\r
- return (IClassificationService) getBean("classificationService");\r
+ return (IClassificationService) getService(IClassificationService.class, "/remoting/classification.service", new CdmServiceRequestExecutor());\r
}\r
\r
@Override\r
public ITaxonNodeService getTaxonNodeService(){\r
- return (ITaxonNodeService) getBean("taxonNodeService");\r
+ return (ITaxonNodeService) getService(ITaxonNodeService.class, "/remoting/taxonnode.service", new CdmServiceRequestExecutor());\r
}\r
\r
@Override\r
public IDescriptionService getDescriptionService(){\r
- return (IDescriptionService) getBean("descriptionService");\r
+ return (IDescriptionService) getService(IDescriptionService.class, "/remoting/description.service", new CdmServiceRequestExecutor());\r
}\r
\r
@Override\r
public IOccurrenceService getOccurrenceService(){\r
- return (IOccurrenceService) getBean("occurrenceService");\r
+ return (IOccurrenceService) getService(IOccurrenceService.class, "/remoting/occurrence.service", new CdmServiceRequestExecutor());\r
}\r
\r
@Override\r
public IPrimerService getPrimerService(){\r
- return (IPrimerService) getBean("primerService");\r
+ return (IPrimerService) getService(IPrimerService.class, "/remoting/primer.service", new CdmServiceRequestExecutor());\r
}\r
\r
@Override\r
public IAmplificationService getAmplificationService(){\r
- return (IAmplificationService) getBean("amplificationService");\r
+ return (IAmplificationService) getService(IAmplificationService.class, "/remoting/amplification.service", new CdmServiceRequestExecutor());\r
}\r
\r
@Override\r
public ISequenceService getSequenceService(){\r
- return (ISequenceService) getBean("sequenceService");\r
+ return (ISequenceService) getService(ISequenceService.class, "/remoting/sequence.service", new CdmServiceRequestExecutor());\r
}\r
\r
@Override\r
public IMediaService getMediaService(){\r
- return (IMediaService) getBean("mediaService");\r
+ return (IMediaService) getService(IMediaService.class, "/remoting/media.service", new CdmServiceRequestExecutor());\r
}\r
\r
@Override\r
public ITermService getTermService(){\r
- return (ITermService) getBean("termService");\r
+ return (ITermService) getService(ITermService.class, "/remoting/term.service", new TermServiceRequestExecutor());\r
}\r
\r
@Override\r
public ICommonService getCommonService(){\r
- return (ICommonService) getBean("commonService");\r
+ return (ICommonService) getService(ICommonService.class, "/remoting/common.service", new CdmServiceRequestExecutor());\r
}\r
\r
@Override\r
public ILocationService getLocationService(){\r
- return (ILocationService) getBean("locationService");\r
+ return (ILocationService) getService(ILocationService.class, "/remoting/location.service", new CdmServiceRequestExecutor());\r
}\r
\r
@Override\r
public IUserService getUserService(){\r
- return (IUserService) getBean("userService");\r
+ return (IUserService) getService(IUserService.class, "/remoting-public/user.service", new CdmServiceRequestExecutor());\r
}\r
\r
@Override\r
public IGrantedAuthorityService getGrantedAuthorityService(){\r
- return (IGrantedAuthorityService) getBean("grantedAuthorityService");\r
+ return (IGrantedAuthorityService) getService(IGrantedAuthorityService.class, "/remoting/grantedauthority.service", new CdmServiceRequestExecutor());\r
}\r
\r
@Override\r
public IService<CdmBase> getMainService(){\r
- return (IService<CdmBase>) getBean("mainService");\r
+ return null;\r
}\r
\r
\r
@Override\r
public ProviderManager getAuthenticationManager(){\r
- return (ProviderManager) getBean("authenticationManager");\r
+ if(authenticationManager != null) {\r
+ return authenticationManager;\r
+ }\r
+ Md5PasswordEncoder passwordEncoder = new Md5PasswordEncoder();\r
+ ReflectionSaltSource saltSource = new ReflectionSaltSource();\r
+ saltSource.setUserPropertyToUse("getUsername");\r
+\r
+ DaoAuthenticationProvider daoAuthenticationProvider = new DaoAuthenticationProvider();\r
+ daoAuthenticationProvider.setUserDetailsService(getUserService());\r
+ daoAuthenticationProvider.setSaltSource(saltSource);\r
+ daoAuthenticationProvider.setPasswordEncoder(passwordEncoder);\r
+\r
+ authenticationManager = new ProviderManager(Arrays.asList((AuthenticationProvider)daoAuthenticationProvider));\r
+ return authenticationManager;\r
}\r
\r
\r
\r
@Override\r
public ICollectionService getCollectionService(){\r
- return (ICollectionService) getBean("collectionService");\r
+ return (ICollectionService) getService(ICollectionService.class, "/remoting/collection.service", new CdmServiceRequestExecutor());\r
}\r
\r
@Override\r
public IFeatureTreeService getFeatureTreeService(){\r
- return (IFeatureTreeService) getBean("featureTreeService");\r
+ return (IFeatureTreeService) getService(IFeatureTreeService.class, "/remoting/featuretree.service", new CdmServiceRequestExecutor());\r
}\r
\r
@Override\r
public IFeatureNodeService getFeatureNodeService(){\r
- return (IFeatureNodeService) getBean("featureNodeService");\r
+ return (IFeatureNodeService) getService(IFeatureNodeService.class, "/remoting/featurenode.service", new CdmServiceRequestExecutor());\r
}\r
\r
@Override\r
public IVocabularyService getVocabularyService(){\r
- return (IVocabularyService) getBean("vocabularyService");\r
+ return (IVocabularyService) getService(IVocabularyService.class, "/remoting/vocabulary.service", new CdmServiceRequestExecutor());\r
}\r
\r
@Override\r
public IIdentificationKeyService getIdentificationKeyService(){\r
- return (IIdentificationKeyService) getBean("identificationKeyService");\r
+ return (IIdentificationKeyService) getService(IIdentificationKeyService.class, "/remoting/identificationkey.service", new CdmServiceRequestExecutor());\r
}\r
\r
@Override\r
public IPolytomousKeyService getPolytomousKeyService(){\r
- return (IPolytomousKeyService) getBean("polytomousKeyService");\r
+ return (IPolytomousKeyService) getService(IPolytomousKeyService.class, "/remoting/polytomouskey.service", new CdmServiceRequestExecutor());\r
}\r
\r
\r
@Override\r
public IPolytomousKeyNodeService getPolytomousKeyNodeService(){\r
- return (IPolytomousKeyNodeService) getBean("polytomousKeyNodeService");\r
+ return (IPolytomousKeyNodeService) getService(IPolytomousKeyNodeService.class, "/remoting/polytomouskeynode.service", new CdmServiceRequestExecutor());\r
}\r
\r
@Override\r
public IWorkingSetService getWorkingSetService(){\r
- return (IWorkingSetService) getBean("workingSetService");\r
+ return (IWorkingSetService) getService(IWorkingSetService.class, "/remoting/workingset.service", new CdmServiceRequestExecutor());\r
}\r
\r
@Override\r
public IGroupService getGroupService(){\r
- return (IGroupService) getBean("groupService");\r
+ return (IGroupService) getService(IGroupService.class, "/remoting/group.service", new CdmServiceRequestExecutor());\r
}\r
\r
\r
@Override\r
public IEntityValidationService getEntityValidationService(){\r
- return (IEntityValidationService) getBean("entityValidationService");\r
+ return (IEntityValidationService) getService(IEntityValidationService.class, "/remoting/entityvalidation.service", new CdmServiceRequestExecutor());\r
}\r
\r
\r
@Override\r
public IEntityConstraintViolationService getEntityConstraintViolationService(){\r
- return (IEntityConstraintViolationService) getBean("entityConstraintViolationService");\r
+ return (IEntityConstraintViolationService) getService(IEntityConstraintViolationService.class, "/remoting/entityconstraintviolation.service", new CdmServiceRequestExecutor());\r
}\r
\r
@Override\r
public ICdmPermissionEvaluator getPermissionEvaluator(){\r
- return (ICdmPermissionEvaluator) getBean("cdmPermissionEvaluator");\r
+\r
+ if(cdmPermissionEvaluator != null) {\r
+ return cdmPermissionEvaluator;\r
+ }\r
+ List<AccessDecisionVoter> decisionVoters = new ArrayList<AccessDecisionVoter>();\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
\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 CdmServiceRequestExecutor());\r
+ }\r
+\r
+ public ITestService getTestService() {\r
+ return (ITestService) getService(ITestService.class, "/remoting/test.service", new CdmServiceRequestExecutor());\r
+ }\r
}\r
package eu.etaxonomy.cdm.api.application;
import java.util.List;
-import java.util.Properties;
import org.apache.log4j.Logger;
import org.hibernate.collection.internal.AbstractPersistentCollection;
import org.hibernate.proxy.AbstractLazyInitializer;
-import org.springframework.beans.factory.xml.XmlBeanDefinitionReader;
import org.springframework.context.ApplicationListener;
-import org.springframework.context.support.GenericApplicationContext;
-import org.springframework.context.support.PropertySourcesPlaceholderConfigurer;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;
new ClassPathResource("/eu/etaxonomy/cdm/remotingApplicationContext.xml");
private final Resource applicationContextResource;
private final IProgressMonitor progressMonitor;
+ private ICdmRemoteSource remoteSource;
/**
this.applicationContextResource =
applicationContextResource != null ? applicationContextResource : DEFAULT_REMOTE_APPLICATION_CONTEXT_RESOURCE;
this.progressMonitor = progressMonitor != null ? progressMonitor : new NullProgressMonitor();
+ this.remoteSource = remoteSource;
setNewRemoteSource(remoteSource, validateXml, listeners);
}
logger.info("Connecting to '" + remoteSource.getName() + "'");
- GenericApplicationContext applicationContext = new GenericApplicationContext();
-
- int nTasks = 3;
+ int nTasks = 2;
progressMonitor.beginTask("Connecting to '" + remoteSource.getName() + "'", nTasks);
progressMonitor.subTask("Initialising CDM Model Cache ...");
CdmRemoteCacheManager.getInstance();
-
- progressMonitor.subTask("Loading context beans ...");
- PropertySourcesPlaceholderConfigurer pspc = new PropertySourcesPlaceholderConfigurer();
- Properties properties = new Properties();
- properties.setProperty("remoteServer", remoteSource.getServer());
- properties.setProperty("remotePort", String.valueOf(remoteSource.getPort()));
- properties.setProperty("remoteContext", remoteSource.getContextPath());
- pspc.setProperties(properties);
- applicationContext.addBeanFactoryPostProcessor(pspc);
- applicationContext.getEnvironment().setActiveProfiles("remoting");
- XmlBeanDefinitionReader xmlReader = new XmlBeanDefinitionReader(applicationContext);
- if(!validateXml) {
- xmlReader.setValidating(false);
- }
- xmlReader.loadBeanDefinitions(applicationContextResource);
- if (listeners != null){
- for(ApplicationListener listener : listeners){
- applicationContext.addApplicationListener(listener);
- }
- }
progressMonitor.worked(1);
-
progressMonitor.subTask("Starting application context ...");
- applicationContext.refresh();
- applicationContext.start();
- setApplicationContext(applicationContext);
+ init();
progressMonitor.worked(1);
progressMonitor.done();
return true;
*/
@Override
protected void init(){
-
- // retrieving the application configuration
- configuration = (ICdmApplicationConfiguration)applicationContext.getBean("cdmApplicationRemoteConfiguration");
+ configuration = new CdmApplicationRemoteConfiguration(remoteSource);
+ ((CdmApplicationRemoteConfiguration)configuration).setApplicationContext(applicationContext);
AbstractLazyInitializer.setConfiguration((CdmApplicationRemoteConfiguration)configuration);
AbstractPersistentCollection.setConfiguration((CdmApplicationRemoteConfiguration)configuration);
-
-
-
}
public ICdmEntitySessionManager getCdmEntitySessionManager() {
}
public IIOService getIOService(){
- return (IIOService) getBean("ioService");
+ return ((CdmApplicationRemoteConfiguration)configuration).getIOService();
}
public ITestService getTestService(){
- return (ITestService) getBean("testService");
+ return ((CdmApplicationRemoteConfiguration)configuration).getTestService();
}
public ICachedCommonService getCachedCommonService(){
- return (ICachedCommonService) getBean("cachedCommonService");
+ return ((CdmApplicationRemoteConfiguration)configuration).getCachedCommonService();
}
}