/**
* 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.calls.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.calls.ICallModel;
import org.eclipse.recommenders.calls.ICallModelProvider;
import org.eclipse.recommenders.calls.PoolingCallModelProvider;
import org.eclipse.recommenders.models.IInputStreamTransformer;
import org.eclipse.recommenders.models.IModelArchiveCoordinateAdvisor;
import org.eclipse.recommenders.models.IModelRepository;
import org.eclipse.recommenders.models.UniqueTypeName;
import org.eclipse.recommenders.models.rcp.ModelEvents.ModelRepositoryClosedEvent;
import org.eclipse.recommenders.models.rcp.ModelEvents.ModelRepositoryOpenedEvent;
import org.eclipse.recommenders.rcp.IRcpService;
import com.google.common.base.Optional;
import com.google.common.eventbus.Subscribe;
public class RcpCallModelProvider implements ICallModelProvider, IRcpService {
private final IModelRepository repository;
private final IModelArchiveCoordinateAdvisor index;
private final Map<String, IInputStreamTransformer> transformers;
private ICallModelProvider delegate;
@Inject
public RcpCallModelProvider(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 PoolingCallModelProvider(repository, index, transformers);
delegate.open();
}
@Override
@PreDestroy
public void close() throws IOException {
delegate.close();
}
@Override
public Optional<ICallModel> acquireModel(UniqueTypeName key) {
return delegate.acquireModel(key);
}
@Override
public void releaseModel(ICallModel value) {
delegate.releaseModel(value);
}
@Subscribe
public void onEvent(ModelRepositoryOpenedEvent e) throws IOException {
open();
}
@Subscribe
public void onEvent(ModelRepositoryClosedEvent e) throws IOException {
close();
}
}