/** * Copyright (c) 2010, 2013 Darmstadt University of Technology. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Marcel Bruch - initial API and implementation. */ package org.eclipse.recommenders.internal.overrides.rcp; import java.io.IOException; import java.util.Map; import javax.annotation.PostConstruct; import javax.annotation.PreDestroy; import javax.inject.Inject; import org.eclipse.recommenders.models.IInputStreamTransformer; import org.eclipse.recommenders.models.IModelArchiveCoordinateAdvisor; import org.eclipse.recommenders.models.IModelRepository; import org.eclipse.recommenders.models.IUniqueName; import org.eclipse.recommenders.models.rcp.ModelEvents.ModelRepositoryClosedEvent; import org.eclipse.recommenders.models.rcp.ModelEvents.ModelRepositoryOpenedEvent; import org.eclipse.recommenders.overrides.IOverrideModel; import org.eclipse.recommenders.overrides.IOverrideModelProvider; import org.eclipse.recommenders.overrides.PoolingOverrideModelProvider; import org.eclipse.recommenders.rcp.IRcpService; import org.eclipse.recommenders.utils.names.ITypeName; import com.google.common.base.Optional; import com.google.common.eventbus.Subscribe; public class RcpOverrideModelProvider implements IOverrideModelProvider, IRcpService { private final IModelRepository repository; private final IModelArchiveCoordinateAdvisor index; private Map<String, IInputStreamTransformer> transformers; private PoolingOverrideModelProvider delegate; @Inject public RcpOverrideModelProvider(IModelRepository repository, IModelArchiveCoordinateAdvisor index, Map<String, IInputStreamTransformer> transformers) { this.repository = repository; this.index = index; this.transformers = transformers; } @Override @PostConstruct public void open() throws IOException { delegate = new PoolingOverrideModelProvider(repository, index, transformers); delegate.open(); } @Override @PreDestroy public void close() throws IOException { delegate.close(); } @Override public Optional<IOverrideModel> acquireModel(IUniqueName<ITypeName> key) { return delegate.acquireModel(key); } @Override public void releaseModel(IOverrideModel model) { delegate.releaseModel(model); } @Subscribe public void onEvent(ModelRepositoryOpenedEvent e) throws IOException { open(); } @Subscribe public void onEvent(ModelRepositoryClosedEvent e) throws IOException { close(); } }