/**
* Copyright (c) 2015 Codetrails GmbH.
* 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:
* Andreas Sewe - initial API and implementation.
*/
package org.eclipse.recommenders.internal.constructors.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.constructors.ConstructorModel;
import org.eclipse.recommenders.constructors.ConstructorModelProvider;
import org.eclipse.recommenders.constructors.IConstructorModelProvider;
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 EclipseConstructorModelProvider implements IConstructorModelProvider, IRcpService {
private final IModelRepository repository;
private final IModelArchiveCoordinateAdvisor index;
private final Map<String, IInputStreamTransformer> transformers;
private IConstructorModelProvider delegate;
@Inject
public EclipseConstructorModelProvider(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 ConstructorModelProvider(repository, index, transformers);
delegate.open();
}
@Override
@PreDestroy
public void close() throws IOException {
delegate.close();
}
@Override
public Optional<ConstructorModel> acquireModel(UniqueTypeName key) {
return delegate.acquireModel(key);
}
@Override
public void releaseModel(ConstructorModel value) {
delegate.releaseModel(value);
}
@Subscribe
public void onEvent(ModelRepositoryOpenedEvent e) throws IOException {
open();
}
@Subscribe
public void onEvent(ModelRepositoryClosedEvent e) throws IOException {
close();
}
}