/* * Copyright 2008 Glencoe Software, Inc. All rights reserved. * Use is subject to license terms supplied in LICENSE.txt */ package ome.testing; import ome.api.IAdmin; import ome.api.IAnalysis; import ome.api.IConfig; import ome.api.IDelete; import ome.api.ILdap; import ome.api.IPixels; import ome.api.IContainer; import ome.api.IQuery; import ome.api.IRenderingSettings; import ome.api.IRepositoryInfo; import ome.api.ISession; import ome.api.IShare; import ome.api.ITypes; import ome.api.IUpdate; import ome.api.JobHandle; import ome.api.RawFileStore; import ome.api.RawPixelsStore; import ome.api.Search; import ome.api.ServiceInterface; import ome.api.ThumbnailStore; import ome.conditions.ApiUsageException; import ome.model.meta.Session; import ome.system.OmeroContext; import ome.system.ServiceFactory; import omeis.providers.re.RenderingEngine; import org.aopalliance.intercept.MethodInterceptor; import org.springframework.aop.framework.ProxyFactory; /** * Wraps all returned services with the given interceptor; * * @author Josh Moore, josh at glencoesoftware.com * @since 3.0-Beta3.1 */ public class InterceptingServiceFactory extends ServiceFactory { final ServiceFactory sf; final MethodInterceptor[] interceptors; public InterceptingServiceFactory(ServiceFactory sf, MethodInterceptor... interceptors) { this.sf = sf; this.interceptors = interceptors; } @SuppressWarnings("unchecked") <T extends ServiceInterface> T wrap(T service) { ProxyFactory factory = new ProxyFactory(); factory.setInterfaces(service.getClass().getInterfaces()); for (MethodInterceptor i : interceptors) { factory.addAdvice(i); } factory.setTarget(service); return (T) factory.getProxy(); } @Override protected String getDefaultContext() { return null; } @Override public void closeSession() throws ApiUsageException { sf.closeSession(); } @Override public JobHandle createJobHandle() { return wrap(sf.createJobHandle()); } @Override public RawFileStore createRawFileStore() { return wrap(sf.createRawFileStore()); } @Override public RawPixelsStore createRawPixelsStore() { return wrap(sf.createRawPixelsStore()); } @Override public RenderingEngine createRenderingEngine() { return wrap(sf.createRenderingEngine()); } @Override public Search createSearchService() { return wrap(sf.createSearchService()); } @Override public ThumbnailStore createThumbnailService() { return wrap(sf.createThumbnailService()); } @Override public IAdmin getAdminService() { return wrap(sf.getAdminService()); } @Override public IAnalysis getAnalysisService() { return wrap(sf.getAnalysisService()); } @Override public IConfig getConfigService() { return wrap(sf.getConfigService()); } @Override public OmeroContext getContext() { return sf.getContext(); } @Override public IDelete getDeleteService() { return wrap(sf.getDeleteService()); } @Override public ILdap getLdapService() { return wrap(sf.getLdapService()); } @Override public IPixels getPixelsService() { return wrap(sf.getPixelsService()); } @Override public IContainer getContainerService() { return wrap(sf.getContainerService()); } @Override public IQuery getQueryService() { return wrap(sf.getQueryService()); } @Override public IRenderingSettings getRenderingSettingsService() { return wrap(sf.getRenderingSettingsService()); } @Override public IRepositoryInfo getRepositoryInfoService() { return wrap(sf.getRepositoryInfoService()); } @Override public <T extends ServiceInterface> T getServiceByClass(Class<T> klass) { return wrap(sf.getServiceByClass(klass)); } @Override public Session getSession() throws ApiUsageException { return sf.getSession(); } @Override public ISession getSessionService() { return wrap(sf.getSessionService()); } @Override public IShare getShareService() { return wrap(sf.getShareService()); } @Override public ITypes getTypesService() { return wrap(sf.getTypesService()); } @Override public IUpdate getUpdateService() { return wrap(sf.getUpdateService()); } @Override public void setSession(Session session) throws ApiUsageException { sf.setSession(session); } @Override public String toString() { return sf.toString(); } }