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.core.synchronize;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.Assert;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.team.core.variants.IResourceVariant;
import org.eclipse.team.internal.core.subscribers.ContentComparator;
A SyncInfoFilter
tests a SyncInfo
for inclusion,
typically in a SyncInfoSet
.
See Also: - SyncInfo
- SyncInfoSet
Since: 3.0
/**
* A <code>SyncInfoFilter</code> tests a <code>SyncInfo</code> for inclusion,
* typically in a <code>SyncInfoSet</code>.
*
* @see SyncInfo
* @see SyncInfoSet
*
* @since 3.0
*/
public abstract class SyncInfoFilter {
Selects SyncInfo
whose local and remote contents match.
This filter makes use of the IStorage
provided by
an IResourceVariant
to obtain the remote contents.
This means that the comparison may contact the server unless the contents
were cached locally by a previous operation. The caching of remote
contents is subscriber specific.
For folders, the comparison always returns true
.
/**
* Selects <code>SyncInfo</code> whose local and remote contents match.
* This filter makes use of the <code>IStorage</code> provided by
* an <code>IResourceVariant</code> to obtain the remote contents.
* This means that the comparison may contact the server unless the contents
* were cached locally by a previous operation. The caching of remote
* contents is subscriber specific.
* <p>
* For folders, the comparison always returns <code>true</code>.
*/
public static class ContentComparisonSyncInfoFilter extends SyncInfoFilter {
ContentComparator criteria = new ContentComparator(false);
Create a filter that does not ignore whitespace.
/**
* Create a filter that does not ignore whitespace.
*/
public ContentComparisonSyncInfoFilter() {
this(false);
}
Create a filter and configure how whitespace is handled.
Params: - ignoreWhitespace – whether whitespace should be ignored
/**
* Create a filter and configure how whitespace is handled.
* @param ignoreWhitespace whether whitespace should be ignored
*/
public ContentComparisonSyncInfoFilter(boolean ignoreWhitespace) {
criteria = new ContentComparator(ignoreWhitespace);
}
@Override
public boolean select(SyncInfo info, IProgressMonitor monitor) {
IResourceVariant remote = info.getRemote();
IResource local = info.getLocal();
if (local.getType() != IResource.FILE) return true;
if (remote == null) return !local.exists();
if (!local.exists()) return false;
return compareContents((IFile)local, remote, monitor);
}
Compare the contents of the local file and its variant.
This is used by the select
method to compare the
contents of two non-null files.
Params: - local – a local file
- remote – a resource variant of the file
- monitor – a progress monitor
Returns: whether the contents of the two files are equal
/**
* Compare the contents of the local file and its variant.
* This is used by the <code>select</code> method to compare the
* contents of two non-null files.
* @param local a local file
* @param remote a resource variant of the file
* @param monitor a progress monitor
* @return whether the contents of the two files are equal
*/
public boolean compareContents(IFile local, IResourceVariant remote, IProgressMonitor monitor) {
Assert.isNotNull(local);
Assert.isNotNull(remote);
return criteria.compare(local, remote, monitor);
}
}
Return true
if the provided SyncInfo
matches the filter.
Params: - info – the
SyncInfo
to be tested - monitor – a progress monitor
Returns: true
if the SyncInfo
matches the filter
/**
* Return <code>true</code> if the provided <code>SyncInfo</code> matches the filter.
*
* @param info the <code>SyncInfo</code> to be tested
* @param monitor a progress monitor
* @return <code>true</code> if the <code>SyncInfo</code> matches the filter
*/
public abstract boolean select(SyncInfo info, IProgressMonitor monitor);
}