Copyright (c) 2000, 2017 IBM Corporation and others.
This program and the accompanying materials
are made available under the terms of the Eclipse Public License 2.0
which accompanies this distribution, and is available at
https://www.eclipse.org/legal/epl-2.0/
SPDX-License-Identifier: EPL-2.0
Contributors:
IBM Corporation - initial API and implementation
/*******************************************************************************
* Copyright (c) 2000, 2017 IBM Corporation and others.
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.team.internal.core.subscribers;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.team.core.TeamException;
import org.eclipse.team.core.variants.IResourceVariant;
import org.eclipse.team.core.variants.ResourceVariantByteStore;
import org.eclipse.team.core.variants.ResourceVariantTree;
import org.eclipse.team.core.variants.ThreeWaySubscriber;
Allow access to the base resource variants but do not support refresh
or modification.
/**
* Allow access to the base resource variants but do not support refresh
* or modification.
*/
public final class ThreeWayBaseTree extends ResourceVariantTree {
private ThreeWaySubscriber subscriber;
/*
* A resource variant byte store that accesses the base bytes from a three-way
* synchronizer. The modification methods are disabled as the base should
* only be modified in the synchronizer directly.
*/
static class BaseResourceVariantByteStore extends ResourceVariantByteStore {
private ThreeWaySubscriber subscriber;
public BaseResourceVariantByteStore(ThreeWaySubscriber subscriber) {
this.subscriber = subscriber;
}
@Override
public void dispose() {
// Nothing to do
}
@Override
public byte[] getBytes(IResource resource) throws TeamException {
return subscriber.getSynchronizer().getBaseBytes(resource);
}
@Override
public boolean setBytes(IResource resource, byte[] bytes) throws TeamException {
// Base bytes are set directly in the synchronizer
return false;
}
@Override
public boolean flushBytes(IResource resource, int depth) throws TeamException {
// Base bytes are flushed directly in the synchronizer
return false;
}
@Override
public boolean deleteBytes(IResource resource) throws TeamException {
// Base bytes are deleted directly in the synchronizer
return false;
}
@Override
public IResource[] members(IResource resource) throws TeamException {
return subscriber.getSynchronizer().members(resource);
}
}
Create a base resource variant tree that accesses the base bytes
from a three-way synchronizer.
Params: - subscriber – the three-way subscriber
/**
* Create a base resource variant tree that accesses the base bytes
* from a three-way synchronizer.
* @param subscriber the three-way subscriber
*/
public ThreeWayBaseTree(ThreeWaySubscriber subscriber) {
super(new BaseResourceVariantByteStore(subscriber));
this.subscriber = subscriber;
}
@Override
public IResource[] refresh(IResource[] resources, int depth, IProgressMonitor monitor) throws TeamException {
return new IResource[0];
}
@Override
protected IResourceVariant[] fetchMembers(IResourceVariant variant, IProgressMonitor progress) throws TeamException {
// Refresh not supported
return new IResourceVariant[0];
}
@Override
protected IResourceVariant fetchVariant(IResource resource, int depth, IProgressMonitor monitor) throws TeamException {
// Refresh not supported
return null;
}
@Override
public IResource[] roots() {
return getSubscriber().roots();
}
@Override
public IResourceVariant getResourceVariant(IResource resource) throws TeamException {
return getSubscriber().getResourceVariant(resource, getByteStore().getBytes(resource));
}
private ThreeWaySubscriber getSubscriber() {
return subscriber;
}
}