package bndtools;
import java.io.File;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.atomic.AtomicReference;
import org.bndtools.api.NamedPlugin;
import org.bndtools.versioncontrol.ignores.manager.api.VersionControlIgnoresManager;
import org.osgi.framework.BundleContext;
import org.osgi.framework.ServiceReference;
import org.osgi.util.tracker.ServiceTracker;
public class VersionControlIgnoresManagerTracker extends ServiceTracker<VersionControlIgnoresManager,VersionControlIgnoresManager> implements VersionControlIgnoresManager {
private final AtomicReference<ServiceReference<VersionControlIgnoresManager>> managerReference = new AtomicReference<ServiceReference<VersionControlIgnoresManager>>();
private final AtomicReference<VersionControlIgnoresManager> manager = new AtomicReference<VersionControlIgnoresManager>();
public VersionControlIgnoresManagerTracker(BundleContext context) {
super(context, VersionControlIgnoresManager.class, null);
}
/*
* ServiceTracker
*/
@Override
public VersionControlIgnoresManager addingService(ServiceReference<VersionControlIgnoresManager> reference) {
VersionControlIgnoresManager manager = super.addingService(reference);
this.managerReference.set(reference);
this.manager.set(manager);
return manager;
}
@Override
public void remove(ServiceReference<VersionControlIgnoresManager> reference) {
if (managerReference.compareAndSet(reference, null)) {
manager.set(null);
}
super.remove(reference);
}
@Override
public void close() {
manager.set(null);
managerReference.set(null);
super.close();
}
/*
* VersionControlIgnoresManager
*/
@Override
public String sanitiseGitIgnoreGlob(boolean rooted, String ignoreGlob, boolean directory) {
VersionControlIgnoresManager manager = this.manager.get();
if (manager == null) {
return ignoreGlob;
}
return manager.sanitiseGitIgnoreGlob(rooted, ignoreGlob, directory);
}
@Override
public void addIgnores(Set<String> plugins, File dstDir, String ignores) {
VersionControlIgnoresManager manager = this.manager.get();
if (manager == null) {
return;
}
manager.addIgnores(plugins, dstDir, ignores);
}
@Override
public void addIgnores(Set<String> plugins, File dstDir, List<String> ignores) {
VersionControlIgnoresManager manager = this.manager.get();
if (manager == null) {
return;
}
manager.addIgnores(plugins, dstDir, ignores);
}
@Override
public Set<String> getPluginsForProjectRepositoryProviderId(String repositoryProviderId) {
VersionControlIgnoresManager manager = this.manager.get();
if (manager == null) {
return null;
}
return manager.getPluginsForProjectRepositoryProviderId(repositoryProviderId);
}
@Override
public Collection<NamedPlugin> getAllPluginsInformation() {
VersionControlIgnoresManager manager = this.manager.get();
if (manager == null) {
return Collections.emptySet();
}
return manager.getAllPluginsInformation();
}
@Override
public void createProjectIgnores(Set<String> plugins, File projectDir, Map<String,String> sourceOutputLocations, String targetDir) {
VersionControlIgnoresManager manager = this.manager.get();
if (manager == null) {
return;
}
manager.createProjectIgnores(plugins, projectDir, sourceOutputLocations, targetDir);
}
}